Bird
Raised Fist0
PHPprogramming~10 mins

Abstract classes and methods in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Abstract classes and methods
Define abstract class
↓
Declare abstract method(s)
↓
Create subclass
↓
Implement abstract method(s)
↓
Instantiate subclass object
↓
Call implemented method(s)
↓
Program runs concrete behavior
This flow shows how an abstract class defines methods without code, subclasses must implement them, and then objects can be created to run concrete code.
Execution Sample
PHP
<?php
abstract class Animal {
  abstract public function makeSound();
}

class Dog extends Animal {
  public function makeSound() {
    echo "Woof!\n";
  }
}

$dog = new Dog();
$dog->makeSound();
?>
Defines an abstract class Animal with an abstract method makeSound, then Dog implements it and outputs 'Woof!'.
Execution Table
StepActionEvaluationResult
1Define abstract class Animal with abstract method makeSound()Class Animal created with abstract methodNo object created yet
2Define class Dog extends AnimalDog must implement makeSound()Class Dog created
3Implement makeSound() in DogMethod outputs 'Woof!'Dog class ready for instantiation
4Instantiate Dog object$dog = new Dog()Object $dog created
5Call $dog->makeSound()Executes Dog's makeSound()Outputs: Woof!
6End of programNo more codeProgram ends
💡 Program ends after calling implemented abstract method in subclass
Variable Tracker
VariableStartAfter Step 4After Step 5Final
$dogundefinedObject of class DogObject of class DogObject of class Dog
Key Moments - 3 Insights
Why can't we create an object of the abstract class Animal?
Because abstract classes are incomplete by design (see Step 1 in execution_table). They have abstract methods without code, so PHP forbids creating objects directly from them.
What happens if Dog does not implement the abstract method makeSound()?
PHP will give an error when defining Dog (Step 2) because all abstract methods must be implemented in subclasses.
Why does calling makeSound() on $dog output 'Woof!'?
Because Dog provides the concrete code for makeSound() (Step 5), so calling it runs Dog's version.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the state of $dog after Step 4?
AObject of class Dog
BUndefined
CObject of class Animal
DNull
💡 Hint
Check variable_tracker row for $dog after Step 4
At which step does the program output 'Woof!'?
AStep 4
BStep 5
CStep 3
DStep 6
💡 Hint
Look at execution_table Action and Result columns for output
If Dog did not implement makeSound(), what would happen?
AProgram runs normally
BError when instantiating Dog
CError when defining Dog class
DOutput would be empty
💡 Hint
Refer to key_moments about missing implementation and Step 2 in execution_table
Concept Snapshot
abstract class ClassName {
  abstract public function methodName();
}

- Abstract classes cannot be instantiated.
- Abstract methods have no body and must be implemented in subclasses.
- Subclasses must define all abstract methods.
- Objects are created from subclasses, not abstract classes.
Full Transcript
This example shows how PHP uses abstract classes and methods. First, an abstract class Animal is defined with an abstract method makeSound. This method has no code and forces subclasses to implement it. Then, a subclass Dog extends Animal and provides the makeSound method that outputs 'Woof!'. We cannot create an Animal object directly because it is abstract. Instead, we create a Dog object and call its makeSound method, which prints 'Woof!'. This ensures a common interface while allowing different subclasses to provide their own behavior.

Practice

(1/5)
1. What is the main purpose of an abstract class in PHP?
easy
A. To store data without any methods
B. To create objects directly without any child classes
C. To allow multiple inheritance in PHP
D. To provide a base class that cannot be instantiated directly

Solution

  1. Step 1: Understand abstract class concept

    An abstract class is designed to be a base class that other classes extend but cannot be instantiated on its own.
  2. Step 2: Eliminate incorrect options

    Options A, B, and D do not describe abstract classes correctly. PHP does not support multiple inheritance, and abstract classes cannot be instantiated directly.
  3. Final Answer:

    To provide a base class that cannot be instantiated directly -> Option D
  4. Quick Check:

    Abstract class = base class no direct objects [OK]
Hint: Abstract classes can't create objects directly [OK]
Common Mistakes:
  • Thinking abstract classes can be instantiated
  • Confusing abstract classes with interfaces
  • Believing abstract classes store data only
2. Which of the following is the correct way to declare an abstract method in a PHP abstract class?
easy
A. abstract public function myMethod();
B. public function myMethod() {}
C. function abstract myMethod();
D. public abstract myMethod() {}

Solution

  1. Step 1: Recall abstract method syntax

    In PHP, abstract methods are declared with the keyword abstract before the function signature and have no body (no curly braces).
  2. Step 2: Check each option

    abstract public function myMethod(); correctly declares an abstract method: abstract public function myMethod();. Options B and D have bodies or wrong order, and C uses incorrect syntax.
  3. Final Answer:

    abstract public function myMethod(); -> Option A
  4. Quick Check:

    Abstract method = abstract + no body [OK]
Hint: Abstract methods have no body and use 'abstract' keyword [OK]
Common Mistakes:
  • Adding curly braces {} to abstract methods
  • Wrong keyword order or missing 'abstract'
  • Trying to implement method body in abstract method
3. What will be the output of the following PHP code?
abstract class Animal {
    abstract public function sound();
}

class Dog extends Animal {
    public function sound() {
        return "Bark";
    }
}

$dog = new Dog();
echo $dog->sound();
medium
A. No output
B. Fatal error: Cannot instantiate abstract class Animal
C. Bark
D. Syntax error

Solution

  1. Step 1: Understand class inheritance and method implementation

    The abstract class Animal has an abstract method sound(). The class Dog extends Animal and implements sound() returning "Bark".
  2. Step 2: Check object creation and method call

    We create an object of Dog (which is allowed) and call sound(). This returns "Bark" which is echoed.
  3. Final Answer:

    Bark -> Option C
  4. Quick Check:

    Implemented abstract method returns 'Bark' [OK]
Hint: Only child classes can be instantiated, output from implemented method [OK]
Common Mistakes:
  • Trying to instantiate abstract class directly
  • Forgetting to implement abstract method in child
  • Expecting syntax error due to abstract method
4. Identify the error in the following PHP code:
abstract class Vehicle {
    abstract public function startEngine();
}

class Car extends Vehicle {
    // No implementation of startEngine()
}

$car = new Car();
$car->startEngine();
medium
A. Class Car must implement abstract method startEngine()
B. Cannot instantiate abstract class Vehicle
C. Method startEngine() should not be abstract
D. No error, code runs fine

Solution

  1. Step 1: Check abstract method implementation

    The abstract class Vehicle declares an abstract method startEngine(). The child class Car does not implement this method.
  2. Step 2: Understand PHP rules for abstract methods

    PHP requires all abstract methods to be implemented in child classes unless the child is also abstract. Since Car is concrete and missing the method, this causes an error.
  3. Final Answer:

    Class Car must implement abstract method startEngine() -> Option A
  4. Quick Check:

    Missing abstract method implementation = error [OK]
Hint: All abstract methods must be implemented in child classes [OK]
Common Mistakes:
  • Forgetting to implement abstract methods in child
  • Trying to instantiate abstract class directly
  • Assuming abstract methods can have bodies
5. Given the abstract class and two child classes below, what will be the output?
abstract class Shape {
    abstract public function area();
}

class Square extends Shape {
    private $side;
    public function __construct($side) {
        $this->side = $side;
    }
    public function area() {
        return $this->side * $this->side;
    }
}

class Circle extends Shape {
    private $radius;
    public function __construct($radius) {
        $this->radius = $radius;
    }
    public function area() {
        return 3.14 * $this->radius * $this->radius;
    }
}

$shapes = [new Square(4), new Circle(3)];
foreach ($shapes as $shape) {
    echo $shape->area() . " ";
}
hard
A. 62.82 61
B. 16 28.26
C. Error: Cannot instantiate abstract class Shape
D. 6 28.26

Solution

  1. Step 1: Calculate area for Square

    Square side is 4, so area = 4 * 4 = 16.
  2. Step 2: Calculate area for Circle

    Circle radius is 3, so area = 3.14 * 3 * 3 = 28.26.
  3. Step 3: Understand output formatting

    The code echoes each area followed by a space, so output is "16 28.26 " without newline.
  4. Final Answer:

    16 28.26 -> Option B
  5. Quick Check:

    Area calculations correct, output matches [OK]
Hint: Calculate each area, watch for spaces and no newline [OK]
Common Mistakes:
  • Confusing output formatting with newline
  • Trying to instantiate abstract class Shape
  • Incorrect area formulas
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard