Understanding Abstract Classes and Methods in PHP
The abstract
keyword in PHP is used to define abstract classes and methods. An abstract class is a special type of class that cannot be instantiated on its own, but can be extended by other classes. An abstract method is a method that is declared in an abstract class, but does not have a body.
Defining an abstract class
To define an abstract class in PHP, you need to use the abstract
keyword followed by the class
keyword and the name of the class. For example:
abstract class Animal {
// class code goes here
}
This defines an abstract class called Animal
. Note that the class body is left empty, as an abstract class does not contain any implementation.
Defining an abstract method
To define an abstract method in an abstract class, you need to use the abstract
keyword followed by the visibility modifier (such as public
or protected
), the function
keyword, the name of the method, and a set of parentheses. You do not need to include a method body, as the method is abstract and does not have any implementation.
For example:
abstract class Animal {
abstract public function speak();
}
This defines an abstract method called speak()
in the Animal
class. This method does not have a body, as it is abstract.
Extending an abstract class
To create a concrete class that extends an abstract class, you need to use the extends
keyword followed by the name of the abstract class. You also need to implement any abstract methods declared in the abstract class.
For example:
class Dog extends Animal {
public function speak() {
echo "Bark!";
}
}
This creates a concrete class called Dog
that extends the
Animal
abstract class. The Dog
class must implement the speak()
method, as it is declared as abstract in the Animal
class. In this case, the speak()
method has been implemented to print the string “Bark!” to the screen.
You can then create an instance of the Dog
class and call its speak()
method like this:
$dog = new Dog();
$dog->speak(); // outputs "Bark!"
Abstract class vs interface
It’s important to note that an abstract class is different from an interface in PHP. An interface is a special type of class that contains only abstract methods and constants, and cannot contain any implementation. An abstract class, on the other hand, can contain both abstract methods and concrete methods with implementation.
For example:
interface Animal {
public function speak();
}
abstract class Dog {
abstract public function speak();
public function wagTail() {
echo "Wagging tail...";
}
}
In this example, the Animal
interface contains only an abstract speak()
method, while the Dog
abstract class contains both an abstract speak()
method and a concrete wagTail()
method.
To implement an interface in a class, you use the implements
keyword instead of the extends
keyword. For example:
class MyDog implements Animal {
public function speak() {
echo "Bark!";
}
}
This creates a class called MyDog
that implements the Animal
interface and must therefore implement the speak()
method.
In conclusion, the abstract
keyword in PHP is used to define abstract classes and methods, which are special types of classes and methods that do not have any implementation and must be implemented by concrete classes that extend or implement them. Abstract classes can contain both abstract and concrete methods, while interfaces can only contain abstract methods and constants. By using abstract classes and methods, you can create more flexible and modular code in PHP.