Prices shown are a USD base. Your local-market price is calculated at checkout in your own currency, plus any local sales tax.
What is inside
20 chapters, in the order the interviews tend to ask them:
Types, unions and modern type declarations
Classes, traits and object composition
References, values and copy semantics
Exceptions and error handling
Composer autoloading and dependency management
PSR standards and project layout
The Laravel request lifecycle
Routing and middleware
The service container and dependency injection
Eloquent and query scopes
Eloquent relationships and eager loading
Validation and form requests
Queues, jobs and events
Testing with PHPUnit and Pest
Performance and caching with Redis
Migrations and schema design
Facades, helpers and the fluent layer
Blade templates and view composition
Artisan commands and scheduled tasks
Security in a Laravel application
How the answers are built
Each chapter opens with the checklist the question is really testing. A few from this pack:
A union type promises only membership: the value is one of the listed types, checked at the call, with no check that it suits the branch the body takes.
A trait is textually inserted into the using class at compile time, so there is no trait object and nothing can be type hinted against one.
Arrays and objects copy differently because they are different kinds of thing: an array assignment makes a second name for the data, an object assignment makes a second name for the object.
Exception and Error both implement Throwable, and the split is by origin rather than severity, so a catch on Exception deliberately lets a TypeError escape.
The autoload section is a convention that Composer turns into PHP files registering a loader, so changing the declaration without regenerating leaves the old map in place.
A standard removes a decision, and a decision made once does not have to be re-argued in every pull request.
Questions this pack covers
What does a union type actually guarantee at runtime?
How does a nullable type differ from a default value of null?
What problem does a trait actually solve?
How does a method from a trait lose to one in the class?
When does PHP copy an array that was passed to a function?
How do you pass an array by reference deliberately?
What separates an exception from an error?
How does a custom exception class help the caller?
Each one is answered in full in the pack, with the reasoning written out rather than a bullet list.