Laravel Interview Questions And Answers

1. What is Laravel

Laravel is free open source “PHP framework” based on MVC Design Pattern.
It is created by Taylor Otwell. Laravel provides expressive and elegant syntax that helps in creating a wonderful web application easily and quickly.

2. List some official packages provided by Laravel

Below are some official packages provided by Laravel

  • Cashier :Laravel Cashier provides an expressive, fluent interface to Stripe’s and Braintree’s subscription billing services. It handles almost all of the boilerplate subscription billing code you are dreading writing. In addition to basic subscription management, Cashier can handle coupons, swapping subscription, subscription “quantities”, cancellation grace periods, and even generate invoice PDFs.
  • Envoy :Laravel Envoy provides a clean, minimal syntax for defining common tasks you run on your remote servers. Using Blade style syntax, you can easily setup tasks for deployment, Artisan commands, and more. Currently, Envoy only supports the Mac and Linux operating systems.
  • Passport :Laravel makes API authentication a breeze using Laravel Passport, which provides a full OAuth2 server implementation for your Laravel application in a matter of minutes. Passport is built on top of the League OAuth2 server that is maintained by Alex Bilbie.
  • Scout :Laravel Scout provides a simple, driver based solution for adding full-text search to your Eloquent models. Using model observers, Scout will automatically keep your search indexes in sync with your Eloquent records.
  • Socialite :Laravel Socialite provides an expressive, fluent interface to OAuth authentication with Facebook, Twitter, Google, LinkedIn, GitHub and Bitbucket. It handles almost all of the boilerplate social authentication code you are dreading writing.


3. What is Lumen?

Lumen is PHP micro framework that built on Laravel’s top components. It is created by Taylor Otwell.
It is the perfect option for building Laravel based micro-services and fast REST API’s.
It’s one of the fastest micro-frameworks available.

4. List out some benefits of Laravel over other Php frameworks ?

Top benifits of laravel framework

  1. Setup and customization process is  easy and fast as compared to others.
  2. Inbuilt Authentication System.
  3. Supports multiple file systems
  4. Pre-loaded packages like Laravel Socialite, Laravel cashier, Laravel elixir,Passport,Laravel Scout.
  5. Eloquent ORM (Object Relation Mapping) with PHP active record implementation.
  6. Built in command line tool “Artisan” for creating a code skeleton ,database structure and build their migration.

5. List out some latest features of Laravel Framework


  • Inbuilt CRSF (cross-site request forgery ) Protection.
    Laravel provided an easy way to protect your website from cross-site request forgery (CSRF) attacks.
    Cross-site request forgeries are malicious attack that forces an end user to execute unwanted actions on a web application in which they’re currently authenticated.
  • Inbuilt paginations Laravel provides an easy approach to implement paginations in your application.Laravel’s paginator is integrated with the query builder and Eloquent ORM and provides convenient, easy-to-use pagination of database.
  • Reverse Routing
    In Laravel reverse routing is generating URL’s based on route declarations.Reverse routing makes your application so much more flexible.
  • Query builder:
    Laravel’s database query builder provides a convenient, fluent interface to creating and running database queries. It can be used to perform most database operations in your application and works on all supported database systems.

    The Laravel query builder uses PDO parameter binding to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.

  • Route caching
  • Database Migration
  • IOC (Inverse of Control) Container Or service container.


6. What is composer ?

 Composer is PHP dependency manager used for installing dependencies of PHP applications.
It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.

It provides us a nice way to reuse any kind of code. Rather than all of us reinventing the wheel over and over, we can instead download popular packages.


7. How to install Laravel via composer ?

   To install Laravel with composer run below command on your terminal.

composer create-project Laravel/Laravel your-project-name version

8. What is php artisan. List out some artisan commands ? 

PHP artisan is the command line interface/tool included with Laravel. It provides a number of helpful commands that can help you while you build your application easily. Here are the list of some artisian command.

  • php artisan list
  • php artisan help
  • php artisan tinker
  • php artisan make
  • php artisan –versian
  • php artisan make model model_name
  • php artisan make controller controller_name

9. How to check current installed version of Laravel ? 

 Use php artisan –version command to check current installed version of Laravel Framework


php artisan --version

10. List some Aggregates methods provided by query builder in Laravel ?

Aggregate function is a function where the values of multiple rows are grouped together as input on certain criteria to form a single value of more significant meaning or measurements such as a set, a bag or a list

Below is list of some Aggregates methods provided by Laravel query builder.

  • count()

    Usage:$products = DB::table(‘products’)->count();

  • max()

    Usage:$price = DB::table(‘orders’)->max(‘price’);

  • min()

    Usage:$price = DB::table(‘orders’)->min(‘price’);

  • avg()

    Usage:$price = DB::table(‘orders’)->avg(‘price’);

  • sum()

    Usage: $price = DB::table(‘orders’)->sum(‘price’);


11. Explain Events in Laravel ?

An event is an incident or occurrence detected and handled by the program.Laravel event provides a simple observer implementation, that allow us to subscribe and listen for events in our application.An event is an incident or occurrence detected and handled by the program.Laravel event provides a simple observer implementation, that allows us to subscribe and listen for events in our application.

Below are some events examples in Laravel:-

  • A new user has registered
  • A new comment is posted
  • User login/logout
  • New product is added.

12. How to turn off CRSF protection for a route in Laravel ?      

To turn off or diasble CRSF protection for specific routes in Laravel open “app/Http/Middleware/VerifyCsrfToken.php” file and add following code in it

//add this in your class
private $exceptUrls = ['controller/route1', 'controller/route2'];

//modify this function

public function handle($request, Closure $next)

 //add this condition
foreach($this->exceptUrls as $route) {

 if ($request->is($route)) {

  return $next($request);


return parent::handle($request, $next);}

13. What happens when you type “php artisan” in the command line?


When you type “PHP artisan” it lists of a few dozen different command options.

14. Which template engine Laravel use ?

 Laravel uses Blade Templating Engine.

Blade is the simple, yet powerful templating engine provided with Laravel. Unlike other popular PHP templating engines, Blade does not restrict you from using plain PHP code in your views. In fact, all Blade views are compiled into plain PHP code and cached until they are modified, meaning Blade adds essentially zero overhead to your application. Blade view files use the .blade.php file extension and are typically stored in the resources/views directory.


15. How can you change your default database type ?       

By default Laravel is configured to use MySQL.In order to change your default database edit your config/database.php and search for ‘default’ => ‘mysql’ and change it to whatever you want (like ‘default’ => ‘sqlite’).


16. Explain Migrations in Laravel ? How can you generate migration . 

Laravel Migrations are like version control for your database, allowing a team to easily modify and share the application’s database schema. Migrations are typically paired with Laravel’s schema builder to easily build your application’s database schema.

Steps to Generate Migrations in Laravel

  • To create a migration, use the make:migration Artisan command
  • When you create a migration file, Laravel stores it in /database/migrations directory.
  • Each migration file name contains a timestamp which allows Laravel to determine the order of the migrations.
  • Open the command prompt or terminal depending on your operating system.

17. What are service providers in laravel ?

  Service providers are the central place of all Laravel application bootstrapping. Your own application, as well as all of Laravel’s core services are bootstrapped via service providers.

Service provider basically registers event listeners, middleware, routes to Laravel’s service container.
All service providers need to be registered in providers array of app/config.php file.




PHP Laravel Interview Questions and Answers

We are going to share with you the top 10 interview questions and answers in PHP Laravel for your preparation purpose:

1- What is Laravel Framework?

Laravel is a free, open-source PHP web framework, created by Taylor Otwell and intended for the development of web applications following the model–view–controller (MVC) architectural pattern.

2- What are the main differences between Laravel 4 and Laravel 5.x?

Summarizing Laravel 5.0 Release notes from the above article: 1. The old app/models directory has been entirely removed.
2. Controllers, middleware, and requests (a new type of class in Laravel 5.0) are now grouped under the app/Http directory.
3. A new app/Providers directory replaces the app/start files from previous versions of Laravel 4.x.
4. Application language files and views have been moved to the resources directory.
5. All major Laravel components implement interfaces which are located in the illuminate/contracts repository.
6. New route:cache Artisan command to drastically speed up the registration of your routes.
7. Laravel 5 now supports HTTP middleware, and the included authentication and CSRF “filters” have been converted to middleware.
8. you may now type-hint dependencies on controller methods.
9. User registration, authentication, and password reset controllers are now included out of the box, as well as simple corresponding views, which are located at resources/views/auth.
10. You may now define events as objects instead of simply using strings.
11. In addition to the queue job format supported in Laravel 4, Laravel 5 allows you to represent your queued jobs as simple command objects. These commands live in the app/Commands directory.
12. A database queue driver is now included in Laravel, providing a simple, local queue driver that requires no extra package installation beyond your database software.
13. Laravel command scheduler allows you to fluently and expressively define your command schedule within Laravel itself, and only a single Cron entry is needed on your server.
14. The php artisan tinker command now utilizes Psysh by Justin Hileman, a more robust REPL for PHP.
15. Laravel 5 now utilizes DotEnv by Vance Lucas.
16. Laravel Elixir, by Jeffrey Way, provides a fluent, expressive interface to compiling and concatenating your assets.
17. Laravel Socialite is an optional, Laravel 5.0+ compatible package that provides totally painless authentication with OAuth providers.
18. Laravel now includes the powerful Flysystem filesystem abstraction library, providing pain free integration with local, Amazon S3, and Rackspace cloud storage – all with one, unified and elegant API!
19. Laravel 5.0 introduces form requests, which extend the Illuminate\Foundation\Http\FormRequest class. These request objects can be combined with controller method injection to provide a boiler-plate free method of validating user input.
20. The Laravel 5 base controller now includes a ValidatesRequests trait. This trait provides a simple validate method to validate incoming requests.
21. new Artisan generator commands have been added to the framework.
22. The popular dd helper function, which dumps variable debug information, has been upgraded to use the amazing Symfony VarDumper.

3- What is routing and how, and what are the different ways to write it?

All Laravel routes are defined in your route files, which are located in the routes directory. These files are automatically loaded by the framework. The routes/web.php file defines routes that are for your web interface. These routes are assigned the web middleware group, which provides features like session state and CSRF protection. The routes in routes/api.php are stateless and are assigned the api middleware group. For most applications, you will begin by defining routes in your routes/web.php file.

4- What is Composer?

Composer is a dependency manager for PHP. Composer will manage the dependencies you require on a project by project basis. This means that Composer will pull in all the required libraries, dependencies and manage them all in one place

5- What is Laravel Eloquent?

The Eloquent ORM included with Laravel provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding “Model” which is used to interact with that table. Models allow you to query for data in your tables, as well as insert new records into the table.

6- What is Luman?

Lumen is a new project from Laravel creator Taylor Otwell. It’s a “micro-framework”, meaning it’s a smaller, faster, leaner version of a full web application framework. It competes other popular micro-frameworks, Slim and Silex.

7- How to implement you own package in Laravel?

You can create a package in laravel using the following steps:
1. Package folder and name
2. Composer.json file for the package
3. Loading package via main composer.json and PSR-4
4. Creating a Service Provider
5. Create a Controller for your package
6. Create our Routes.php file
For more about how to build your own package in laravel visit: how to create a laravel 5 package in 10 easy steps

8- What is database migration? And how to use it to add insert initial data to database?

Migrations are like version control for your database, allowing your team to easily modify and share the application’s database schema. Migrations are typically paired with Laravel’s schema builder to easily build your application’s database schema. If you have ever had to tell a teammate to manually add a column to their local database schema, you’ve faced the problem that database migrations solve.
Laravel includes a simple method of seeding your database with test data using seed classes. All seed classes are stored in the database/seeds directory. Seed classes may have any name you wish, but probably should follow some sensible convention, such as UsersTableSeeder, etc. By default, a DatabaseSeeder class is defined for you. From this class, you may use the call method to run other seed classes, allowing you to control the seeding order.

9- What directories that need to be writable laravel installation?

After installing Laravel, you may need to configure some permissions. Directories within the storage and the bootstrap/cache directories should be writable by your web server or Laravel will not run. If you are using the Homestead virtual machine, these permissions should already be set.

10- What is HTTP middleware?

Middleware provide a convenient mechanism for filtering HTTP requests entering your application. For example, Laravel includes a middleware that verifies the user of your application is authenticated. If the user is not authenticated, the middleware will redirect the user to the login screen. However, if the user is authenticated, the middleware will allow the request to proceed further into the application.
Of course, additional middleware can be written to perform a variety of tasks besides authentication. A CORS middleware might be responsible for adding the proper headers to all responses leaving your application. A logging middleware might log all incoming requests to your application.
There are several middleware included in the Laravel framework, including middleware for authentication and CSRF protection. All of these middleware are located in the app/Http/Middleware directory.

21 Essential PHP Interview Questions –

Consider the following code:

$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2)) {
    echo "\"" . $str1 . "\" contains \"" . $str2 . "\"";
} else {
    echo "\"" . $str1 . "\" does not contain \"" . $str2 . "\"";

The output will be:

"yabadabadoo" does not contain "yaba"

Why? How can this code be fixed to work correctly?

The problem here is that strpos() returns the starting position index of $str1 in $str2 (if found), otherwise it returns false. So in this example, strpos() returns 0 (which is then coerced to false when referenced in the if statement). That’s why the code doesn’t work properly.

The correct solution would be to explicitly compare the value returned by strpos() to false as follows:

$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2) !== false) {
    echo "\"" . $str1 . "\" contains \"" . $str2 . "\"";
} else {
    echo "\"" . $str1 . "\" does not contain \"" . $str2 . "\"";

Note that we used the !== operator, not just the != operator. If we use !=, we’ll be back to the problem that 0 is coerced to false when referenced in a boolean expression, so 0 != false will evaluate to false.

What will be the output of the code below and why?

$x = 5;
echo $x;
echo "<br />";
echo $x+++$x++;
echo "<br />";
echo $x;
echo "<br />";
echo $x---$x--;
echo "<br />";
echo $x;

What will be the values of $a and $b after the code below is executed? Explain your answer.

$a = '1';
$b = &$a;
$b = "2$b";

Both $a and $b will be equal to the string "21" after the above code is executed.

Here’s why:

The statement $b = &$a; sets $b equal to a reference to $a (as opposed to setting $b to the then-current value of $a). Thereafter, as long as $b remains a reference to $a, anything done to $a will affect $b and vice versa.

So when we subsequently execute the statement $b = "2$b", $b is set equal to the string "2" followed by the then-current value of $b (which is the same as $a) which is 1, so this results in $b being set equal to the string "21" (i.e., the concatenation of "2" and "1"). And, since $b is a reference to $a, this has the same affect on the value of $a, so both end up equal to "21".

What will be the output of each of the statements below and why?

var_dump(0123 == 123);
var_dump('0123' == 123);
var_dump('0123' === 123);

var_dump(0123 == 123) will output bool(false) because the leading 0 in 0123 tells the PHP interpreter to treat the value as octal (rather than decimal) value, and 123 octal is equal to 83 decimal, so the values are not equal.

var_dump('0123' == 123) will output bool(true) since the string 0123 will automatically be coerced to an integer when being compared with an integer value. Interestingly, when this conversion is performed, the leading 0 is ignored and the value is treated as a decimal (rather than octal) value, so the values are bother 123 (decimal) and are therefore equal.

var_dump('0123' === 123) outputs bool(false) since it performs a more strict comparison and does not do the automatic type coercion of the string to an integer.

What is the problem with the code below? What will it output? How can it be fixed?

$referenceTable = array();
$referenceTable['val1'] = array(1, 2);
$referenceTable['val2'] = 3;
$referenceTable['val3'] = array(4, 5);

$testArray = array();

$testArray = array_merge($testArray, $referenceTable['val1']);
$testArray = array_merge($testArray, $referenceTable['val2']);
$testArray = array_merge($testArray, $referenceTable['val3']);

The output will be as follows:

array(2) { [0]=> int(1) [1]=> int(2) }

You may also see two warnings generated, similar to the following:

Warning: array_merge(): Argument #2 is not an array
Warning: array_merge(): Argument #1 is not an array

The issue here is that, if either the first or second argument to array_merge() is not an array, the return value will be NULL. For example, although one might reasonably expect that a call such as array_merge($someValidArray, NULL) would simply return $someValidArray, it instead returns NULL! (And to make matters worse, this is not documented well at all in the PHP documentation.)

As a result, the call to $testArray = array_merge($testArray, $referenceTable['val2']) evaluates to $testArray = array_merge($testArray, 3) and, since 3 is not of type array, this call to array_merge() returns NULL, which in turn ends up setting $testArray equal to NULL. Then, when we get to the next call to array_merge(), $testArray is now NULL so array_merge() again returns NULL. (This also explains why the first warning complains about argument #2 and the second warning complains about argument #1.)

The fix for this is straightforward. If we simply typecast the second argument to an array, we will get the desired results. The corrected array_merge() calls would therefore be as follows:

$testArray = array_merge($testArray, (array)$referenceTable['val1']);
$testArray = array_merge($testArray, (array)$referenceTable['val2']);
$testArray = array_merge($testArray, (array)$referenceTable['val3']);

which will yield the following output (and no warnings):

array(2) { [0]=> int(1) [1]=> int(2) } 
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }

What will this code output and why?

$x = true and false;

Surprisingly to many, the above code will output bool(true) seeming to imply that the and operator is behaving instead as an or.

The issue here is that the = operator takes precedence over the and operator in order of operations, so the statement $x = true and false ends up being functionally equivalent to:

$x = true;       // sets $x equal to true
true and false;  // results in false, but has no affect on anything

This is, incidentally, a great example of why using parentheses to clearly specify your intent is generally a good practice, in any language. For example, if the above statement $x = true and false were replaced with $x = (true and false), then $x would be set to false as expected.

What will $x be equal to after the statement $x = 3 + "15%" + "$25"?

The correct answer is 18.

Here’s why:

PHP supports automatic type conversion based on the context in which a variable or value is being used.

If you perform an arithmetic operation on an expression that contains a string, that string will be interpreted as the appropriate numeric type for the purposes of evaluating the expression. So, if the string begins with one or more numeric characters, the remainder of the string (if any) will be ignored and the numeric value is interpreted as the appropriate numeric type. On the other hand, if the string begins with a non-numeric character, then it will evaluate to zero.

With that understanding, we can see that "15%" evaluates to the numeric value 15 and "$25" evaluates to the numeric value zero, which explains why the result of the statement $x = 3 + "15%" + "$25" is 18 (i.e., 3 + 15 + 0).

After the code below is executed, what will be the value of $text and what will strlen($text) return? Explain your answer.

$text = 'John ';
$text[10] = 'Doe';

After the above code is executed, the value of $text will be the string “John D” (i.e., “John”, followed by 5 spaces, followed by “D”) and strlen($text) will return 11.

There are two things going on here.

First of all, since $text is a string, setting a single element of $text simply sets that single character to the value specified. The statement $text[10] = 'Doe' therefore sets that single character to 'D' (i.e., the first character in the string "Doe", since an element of a string can only be a single character).

Secondly, $text[10] = 'Doe' says to set the 11th character of the string (remember that indices are zero-based) to 'D'. Prior to that statement, though, the length of the string $text ("John ") was only 5. Whereas compilers or interpreters in other languages might barf (with something akin to an out-of-bounds-index error) when you then attempt to set the 11th character of a 5 character string, PHP instead is very “accommodating” and instead allows this and sets all intermediate characters to blanks.

PHP_INT_MAX is a PHP constant that corresponds to the largest supported integer value (value is based on the version of PHP being run and the platform it is running on).

Assume that var_dump(PHP_INT_MAX) will yield int(9223372036854775807).

In that case, what will be the result of var_dump(PHP_INT_MAX + 1)? Also, what will be the result of var_dump((int)(PHP_INT_MAX + 1))?

NOTE: It’s not important to supply the exact value when answering the question, but rather to explain what will happen and why.

The result of var_dump(PHP_INT_MAX + 1) will be displayed as a double (in the case of this specific example, it will display double(9.2233720368548E+18)). The key here is for the candidate to know that PHP handles large integers by converting them to doubles (which can store larger values).

And interestingly, the result of var_dump((int)(PHP_INT_MAX + 1)) will be displayed as a negative number (in the case of this specific example, it will display int(-9223372036854775808)). Again, the key here is for the candidate to know that the value will be displayed as a negative number, not to know the precise value.

How would you sort an array of strings to their natural case-insensitive order, while maintaing their original index association?

For example, the following array:

	'0' => 'z1',
	'1' => 'Z10',
	'2' => 'z12',
	'3' => 'Z2',
	'4' => 'z3',

After sorting, should become:

	'0' => 'z1',
	'3' => 'Z2',
	'4' => 'z3',
	'1' => 'Z10',
	'2' => 'z12',

The trick to solving this problem is to use three special flags with the standard asort() library function:


The function asort() is a variant of the standard function sort() that preserves the index association. The three flags used above SORT_STRING, SORT_FLAG_CASE and SORT_NATURAL forces the sort function to treat the items as strings, sort in a case-insensitive way and maintain natural order respectively.

Note: Using the natcasesort() function would not be a correct answer, since it would not maintain the original index association of the elements of the array.

What is PEAR in php?

PEAR (PHP Extension and Application Repository) is a framework and repository for reusable PHP components. PEAR is a code repository containing all kinds of php code snippets and libraries.

PEAR also offers a command-line interface that can be used to automatically install packages.

What are the differences between echo and print in PHP?

echo and print are largely the same in PHP. Both are used to output data to the screen.

The only differences are as follows:

  1. echo does not return a value whereas print does return a value of 1 (this enables print to be used in expressions).
  2. echo can accept multiple parameters (although such usage is rare) while print can only take a single argument.

Consider the following code:

$x = NULL;

if ('0xFF' == 255) {
    $x = (int)'0xFF';

What will be the value of $x after this code executes? Explain your answer.

Perhaps surprisingly, the answer is neither NULL nor 255. Rather, the answer is that $x will equal 0 (zero).


First, let’s consider whether '0xFF' == 255 will evaluate to true or false. When a hex string is loosely compared to an integer, it is converted to an integer. Internally, PHP uses is_numeric_string to detect that the string contains a hex value and converts it to an integer (since the other operand is an integer). So in this case, ‘0xFF’ is converted to its integer equivalent which is 255. Since 255 = 255, this condition evaluates to true. (Note that this only works for hex strings, not for octal or binary strings.)

But if that’s the case, shouldn’t the statement $x = (int)'0xFF'; execute and result in $x being set equal to 255?

Well, the statement does execute, but it results in $x being set equal to 0, not 255 (i.e., it is not set to the integer equivalent of ‘0xFF’). The reason is that the explicit type cast of the string to an integer uses convert_to_long (which works differently than the is_numeric_string function that was used in evaluating the conditional expression, as explained above). convert_to_long processes the string one character at a time from left to right and stops at the first non-numeric character that it reaches. In the case of ‘0xFF’, the first non-numeric character is ‘x’, so the only part of the string processed is the initial ‘0’. As a result, the value returned by (int)'0xFF' is 0, so when the code completes, $x will be equal to 0.


What is use of the header() function in PHP?

  1. header() is used to redirect from one page to another: header("Location: index.php");
  2. header() is used to send an HTTP status code: header("HTTP/1.0 this Not Found");
  3. header() is used to send a raw HTTP header: header('Content-Type: application/json');

What is the difference between include_once() and require_once(), which one would you use in circumstances where you need to connect to a database, and why?

include_once() or include allows a file to be included, and in cases where the file is missing or has the wrong name, we receive an error message and execution will still continue regardless.

On the other hand, require_once() or require would be suitable in cases where a file needs to be included once and if it is missing or has a wrong name then we receive a fatal error and the execution of the program stops.

require_once or require is a suitable method in cases where a database connection file is involved and helps alleviate the possibility of multiple instances of the same file being included several times.

How can you tell if a number is even or odd without using any condition or loop?



echo "Your number is: ".$arr[$check%2];

What is the difference between session and quickies?

Session stores the value on the server and quickies stores the value on the user’s browser.

What does the follow code echo?

$a = "PHP";
$a = $a + 1;
echo $a;

The number 1.

$str = 'drinking giving jogging 喝 喝 passing 制图 giving 跑步 吃';  // Example input 

Highlight all the Chinese characters in red and return the string.

$str = 'drinking giving jogging 喝 喝 passing 制图 giving 跑步 吃';
$string = explode(' ', $str);
$chi = array_filter( explode('_', preg_replace(array('/[^\p{Han}?]/u', '/(\s)+/'), array('_', '$1'), $str)));
$value = array ();
foreach ($string as $s) {
           if (in_array($s, $chi)) {
               $value[] = ''.$s.'';
           } else {
               $value[] = $s;

return (implode(' ', $value));

Write a sample of code showing the nested ternary conditional operator in PHP.

$number_class = $number == 0 ? 'blue' : ($number > 0 ? 'green' : 'red');

Here we are assigning different strings to the number_class variable based on a numeric value ($number).

What are Traits?

Traits are a mechanism that provides some of the reuse advantages of multiple inheritance in languages like PHP where multiple inheritance is not supported. Traits enable developers to reuse combinations of methods from different class hierarchies.

10 PHP interview questions and answers – (upwork)

  • Q

    Do you have any experience with LAMP?


    LAMP is an open-source solution stack that contains everything you need to create a complete, stand-alone platform for your web application—Linux, Apache, MySQL, and PHP. This question is a good opportunity for your prospective programmer to detail any experience they have taking a web project from conception to completion.


  • Q

    What are PHP sessions and how do they work?


    What you’re really asking is whether they know how to use session_start(). It either creates or resumes a session based on an identifier that is sent to the server via a GET or POST request or a cookie. The most common use case scenario on the web is when a website won’t let you comment or post without first prompting a login. How does it know whether you’re logged in? One way would be to place a cookie in the user’s browser; on every request the cookie is sent server-side, where PHP can be used to determine which information is sent back and displayed to the client. While session_start() saves session data in files by default, it is also possible to store sessions directly in the database.


  • Q

    How are classes loaded in PHP?


    This is a good way to gauge a developer’s understanding of autoloading. Whenever a class is instantiated, a function is triggered. You can register a function with the spl_autoload que detailed below, courtesy of

    bool spl_autoload_register ([ callable $autoload_function [, bool$throw = true [, bool $prepend = false ]]] )


  • Q

    What are some of your favorite PHP design patterns?


    Design patterns are basically best-practice templates that programmers can use to consistently write well-designed code more quickly. Here are a couple examples along with their use cases:

    The Singleton: Used when you only want to allow access to one instance of a particular class.

    The Factory: The factory pattern makes it
    easier to create multiple classes without repeating code. To change,
    rename, or replace the class, simply modify the factory.


  • Q

    Determine the value of $pear after executing the code below. What will strlen($pear) return? Explain your answer.


    $pear = ‘PEAR ’;
    $pear[12] = ‘PHP Extension and Application Repository’;

    This question reveals a few interesting things about the way PHP interprets code. The value of $pear in the code above will be the string “PEAR P” or the string “PEAR ” followed by seven spaces, followed by “P,” which is the first character in the string “PHP Extension and Application Repository.” The value returned by strlen($pear) will thus be 13. Since an element of a string can only consist of one character, and the count of elements within a string starts with 0, $pear[12] sets the 13th character of the string to the letter “P.” Interestingly enough, we chose to set the 13th value of a string that only has five characters. While other language interpreters might have thrown an out-of-bounds index error, PHP is more forgiving and fills in the blanks with empty spaces.


  • Q

    Determine the output of the code below. Explain your answer.


    var_dump(42 == 042);
    var_dump(‘042’ == 42);
    var_dump(‘042’ === 42);

    This question quizzes the coder on how the PHP interpreter handles numbers and strings.
    i. var_dump(42 == 042); will output bool(false) because the PHP interpreter treats leading zeroes as octals. 042 is 32 in decimal, which does not equal 42.
    ii. var_dump(‘042’ == 42); will output bool(true) because PHP interpreter will coerce the string into an integer but ignore the leading zero. 42 is equal to 42.
    iii. var_dump(‘042’ === 42); will output bool(false) because the === operator performs a stricter comparison and will not coerce the integer into a string.


  • Q

    Explain why the two code snippets below will evaluate to the same output.


    $x = true or false; $x = true and false;
    var_dump($x); var_dump($x);

    This question is designed to test a coder’s knowledge of the order of operations. The first block of code is more straightforward, evaluating to true because of the “or” operator. The second code block, however, would typically be expected to evaluate to false. Instead, it evaluates to true because of how the PHP interpreter handles the order of operations: “=” is prioritized leading to the following equivalent code snippet:

    $x = true; // sets $x equal to true
    True and false; // evaluates to false, but does not affect anything


  • Q

    If $x = 100 + “25%” + “$40” what is the value of $x and why?


    The answer is $x = 125, because PHP uses automatic type conversion in deciding how to treat variables and values depending on how they are used. When PHP encounters a string during an arithmetic operation, it will interpret any numerical value and ignore the remainder in order from left to right. Strings that don’t start with numbers are evaluated to zero.

    $x = 100 + 25 + 0 = 125.


  • Q

    Explain the difference between classes and interfaces.


    In layman’s terms, an interface is a class without all the business logic. In an interface, all methods must be public and multiple inheritance is supported. However, all methods must be defined within the class that implements them. Abstract classes, on the other hand, can be declared with modifiers like public or internal, and can define properties or variables. Abstract classes do not support multiple inheritance and can only be extended by one abstract class.


  • Q

    Predict the output of the code below. Explain your answer.


    $x = 2
    $y = 4
    $z = 6
    if($z > $y > $x) {
        echo “true”;
        echo “false”;

    At first glance, one would expect the boolean to evaluate to “true” because 6 > 4 > 2. However, the correct answer is “false” because PHP will first evaluate $z > $y, which returns a boolean value of 1 or true. It is this boolean value of 1 that is compared to the next integer in the chain, bool(1) > $z, which will result in NULL and echo “false.”