Inheritance is a well-established programming principle, and PHP makes use of this principle in its object model. This principle will affect the way many classes and objects relate to one another.
For example, when extending a class, the subclass inherits all of the public and protected methods, properties and constants from the parent class. Unless a class overrides those methods, they will retain their original functionality.
This is useful for defining and abstracting functionality, and permits the implementation of additional functionality in similar objects without the need to reimplement all of the shared functionality.
Private methods of a parent class are not accessible to a child class. As a result,
child classes may reimplement a private method themselves without regard for normal
inheritance rules. Prior to PHP 8.0.0, however, final
and static
restrictions were applied to private methods. As of PHP 8.0.0, the only private method
restriction that is enforced is private final
constructors, as that
is a common way to "disable" the constructor when using static factory methods instead.
The visibility
of methods, properties and constants can be relaxed, e.g. a
protected
method can be marked as
public
, but they cannot be restricted, e.g.
marking a public
property as private
.
Note:
Unless autoloading is used, the classes must be defined before they are used. If a class extends another, then the parent class must be declared before the child class structure. This rule applies to classes that inherit other classes and interfaces.
Note:
It is not allowed to override a read-write property with a readonly property or vice versa.
<?php
class A {
public int $prop;
}
class B extends A {
// Illegal: read-write -> readonly
public readonly int $prop;
}
?>
Example #1 Inheritance Example
<?php
class Foo
{
public function printItem($string)
{
echo 'Foo: ' . $string . PHP_EOL;
}
public function printPHP()
{
echo 'PHP is great.' . PHP_EOL;
}
}
class Bar extends Foo
{
public function printItem($string)
{
echo 'Bar: ' . $string . PHP_EOL;
}
}
$foo = new Foo();
$bar = new Bar();
$foo->printItem('baz'); // Output: 'Foo: baz'
$foo->printPHP(); // Output: 'PHP is great'
$bar->printItem('baz'); // Output: 'Bar: baz'
$bar->printPHP(); // Output: 'PHP is great'
?>