PHP abstract Keyword
last modified April 16, 2025
The PHP abstract keyword is used to create abstract classes and
methods in object-oriented programming. Abstract classes cannot be instantiated
directly. They serve as base classes that other classes can extend.
Basic Definitions
An abstract class is a class that contains at least one abstract
method. Abstract classes provide a common interface for their subclasses.
An abstract method is a method declared without implementation.
It only defines the method signature. Concrete subclasses must implement all
abstract methods.
The abstract keyword enforces a contract that derived classes must
follow. This is a key concept in polymorphism and inheritance in PHP OOP.
Basic Abstract Class
This example demonstrates the simplest form of an abstract class in PHP.
<?php
abstract class Animal {
abstract public function makeSound();
}
class Dog extends Animal {
public function makeSound() {
echo "Bark";
}
}
$dog = new Dog();
$dog->makeSound();
The Animal class is declared abstract with one abstract method.
Dog extends Animal and implements makeSound.
Attempting to instantiate Animal directly would cause an error.
Abstract Class with Concrete Methods
This example shows an abstract class with both abstract and concrete methods.
<?php
abstract class Shape {
abstract public function area();
public function description() {
return "This is a shape.";
}
}
class Square extends Shape {
private $side;
public function __construct($side) {
$this->side = $side;
}
public function area() {
return $this->side * $this->side;
}
}
$square = new Square(5);
echo $square->area();
echo $square->description();
Shape has an abstract area method and a concrete
description method. Square implements area
but inherits description. Abstract classes can mix method types.
Multiple Abstract Methods
This example demonstrates an abstract class with multiple abstract methods.
<?php
abstract class Database {
abstract public function connect();
abstract public function query($sql);
abstract public function disconnect();
}
class MySQL extends Database {
public function connect() {
echo "Connecting to MySQL...";
}
public function query($sql) {
echo "Executing: $sql";
}
public function disconnect() {
echo "Disconnecting from MySQL...";
}
}
$db = new MySQL();
$db->connect();
$db->query("SELECT * FROM users");
$db->disconnect();
The Database abstract class defines three abstract methods.
MySQL must implement all of them. This ensures consistent
interface across different database implementations.
Abstract Class with Properties
This example shows an abstract class with properties alongside abstract methods.
<?php
abstract class Vehicle {
protected $speed;
abstract public function accelerate();
public function getSpeed() {
return $this->speed;
}
}
class Car extends Vehicle {
public function accelerate() {
$this->speed += 10;
}
}
$car = new Car();
$car->accelerate();
echo $car->getSpeed();
Vehicle has a protected property $speed and an abstract
method. Car implements accelerate and can access the
inherited property. Abstract classes can include properties and concrete methods.
Abstract Class Inheritance
This example demonstrates an abstract class extending another abstract class.
<?php
abstract class A {
abstract public function methodA();
}
abstract class B extends A {
abstract public function methodB();
}
class C extends B {
public function methodA() {
echo "Method A implementation";
}
public function methodB() {
echo "Method B implementation";
}
}
$obj = new C();
$obj->methodA();
$obj->methodB();
B extends A and adds another abstract method.
C must implement both abstract methods from both classes.
Abstract classes can form inheritance hierarchies like concrete classes.
Abstract Class with Constructor
This example shows an abstract class with a constructor method.
<?php
abstract class Person {
protected $name;
public function __construct($name) {
$this->name = $name;
}
abstract public function greet();
}
class Student extends Person {
public function greet() {
return "Hello, I'm student {$this->name}";
}
}
$student = new Student("Alice");
echo $student->greet();
Person has a concrete constructor that sets the $name
property. Student calls the parent constructor and implements
greet. Abstract classes can have constructors like regular classes.
Final Abstract Method
This example demonstrates combining abstract and final keywords in a method.
<?php
abstract class Template {
final public function templateMethod() {
$this->stepOne();
$this->stepTwo();
}
abstract protected function stepOne();
abstract protected function stepTwo();
}
class Implementation extends Template {
protected function stepOne() {
echo "Step 1 completed";
}
protected function stepTwo() {
echo "Step 2 completed";
}
}
$impl = new Implementation();
$impl->templateMethod();
templateMethod is final and defines an algorithm structure.
The abstract methods stepOne and stepTwo must be
implemented by subclasses. This is the Template Method design pattern.
Best Practices
- Purpose: Use abstract classes to define common interfaces.
- Implementation: All abstract methods must be implemented.
- Design: Favor abstract classes when sharing code is needed.
- Naming: Use clear names indicating abstract nature.
- Documentation: Document expected behavior of abstract methods.
Source
This tutorial covered PHP abstract classes and methods with practical examples showing abstract keyword usage in various scenarios.
Author
List all PHP tutorials.