Object-oriented Principles In Php Laracasts Download Direct

Laracasts frequently uses inheritance to avoid duplication. For instance, a Vehicle parent class and Car, Motorcycle children.

Downloaded example:

abstract class Vehicle
abstract public function getFuelType(): string;
public function startEngine(): string
return "Engine started. Fuel: $this->getFuelType()";

class ElectricCar extends Vehicle public function getFuelType(): string return "Electricity"; object-oriented principles in php laracasts download

In Laravel, you extend base Controller, Request, or Model classes. Even custom classes like PaymentGatewayStripeGateway/PayPalGateway follow this pattern.

Caution from Laracasts: Inheritance is powerful but can be overused. Prefer composition when behavior varies widely (we’ll see that later). Laracasts frequently uses inheritance to avoid duplication

Imagine you have a User class with a property $status. If you make it public, any code in your application can set $user->status = 'gibberish'. Encapsulation forces this data to go through a "gatekeeper" (a method) to ensure validity.

class User 
    // Hide the data
    private $status = 'active';
// Provide a controlled way to read data (Getter)
    public function getStatus() 
        return $this->status;
// Provide a controlled way to write data (Setter)
    public function setStatus($status) 
        if (!in_array($status, ['active', 'inactive', 'banned'])) 
            throw new Exception("Invalid status");
$this->status = $status;

By doing this, you protect the integrity of your object's data. The object is now in charge of its own state.


Inheritance allows a class to inherit properties and methods from another class. This promotes code reuse. In Laravel, you extend base Controller , Request

class Shape 
    public function getArea() 
        return 0;
class Circle extends Shape 
    public $radius;
public function getArea() 
        return pi() * $this->radius * $this->radius;

While powerful, inheritance can be overused. If you create deep chains of inheritance (e.g., User -> AdminUser -> SuperAdminUser), your code becomes rigid and hard to change.

Polymorphism is the ability of an object to take on multiple forms. In PHP, we can achieve polymorphism using method overriding or method overloading.

class Shape 
    public function area() 
        // Calculate area
class Circle extends Shape 
    public function area($radius) 
        return pi() * $radius * $radius;
class Rectangle extends Shape 
    public function area($width, $height) 
        return $width * $height;