Наследование

Наследование — это хорошо зарекомендовавший себя принцип программирования. PHP использует этот принцип в своей объектной модели. Этот принцип будет распространяться на то, каким образом множество классов и объектов относятся друг к другу.

Например, когда вы расширяете класс, дочерний класс наследует все публичные и защищенные методы из родительского класса. До тех пор пока не будут эти методы переопределены, они будут сохранять свою исходную функциональность.

Это полезно для определения и абстрагирования функциональности и позволяет реализовать дополнительную функциональность в похожих объектах без необходимости реализовывать всю общую функциональность.

Замечание:

Пока не используется автозагрузка, классы должны быть объявлены до того, как их будут использовать. Если класс расширяет другой, то родительский класс должен быть объявлен до наследующего класса. Это правило применяется к классам, которые наследуют другие классы или интерфейсы.

Пример #1 Пример наследования

<?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'); // Выведет: 'Foo: baz'
$foo->printPHP();       // Выведет: 'PHP is great' 
$bar->printItem('baz'); // Выведет: 'Bar: baz'
$bar->printPHP();       // Выведет: 'PHP is great'

?>

Коментарии

You can force a class to be strictly an inheritable class by using the "abstract" keyword. When you define a class with abstract, any attempt to instantiate a separate instance of it will result in a fatal error. This is useful for situations like a base class where it would be inherited by multiple child classes yet you want to restrict the ability to instantiate it by itself.

Example........

<?php

abstract class Cheese
{
     
//can ONLY be inherited by another class
}

class 
Cheddar extends Cheese
{
}

$dinner = new Cheese//fatal error
$lunch = new Cheddar//works!

?>
2009-10-27 08:01:45
http://php5.kiev.ua/manual/ru/language.oop5.inheritance.html
Here is some clarification about PHP inheritance – there is a lot of bad information on the net.  PHP does support Multi-level inheritance.  (I tested it using version 5.2.9).  It does not support multiple inheritance.
 
This means that you cannot have one class extend 2 other classes (see the extends keyword).  However, you can have one class extend another, which extends another, and so on. 
 
Example:
 
<?php
class {
       
// more code here
}
 
class 
extends {
       
// more code here
}
 
class 
extends {
       
// more code here
}
 
 
$someObj = new A();  // no problems
$someOtherObj = new B(); // no problems
$lastObj = new C(); // still no problems
 
?>
2010-04-14 23:53:15
http://php5.kiev.ua/manual/ru/language.oop5.inheritance.html
I was recently extending a PEAR class when I encountered a situation where I wanted to call a constructor two levels up the class hierarchy, ignoring the immediate parent.  In such a case, you need to explicitly reference the class name using the :: operator.

Fortunately, just like using the 'parent' keyword PHP correctly recognizes that you are calling the function from a protected context inside the object's class hierarchy.

E.g:

<?php
class foo
{
  public function 
something()
  {
    echo 
__CLASS__// foo
   
var_dump($this);
  }
}

class 
foo_bar extends foo
{
  public function 
something()
  {
    echo 
__CLASS__// foo_bar
   
var_dump($this);
  }
}

class 
foo_bar_baz extends foo_bar
{
  public function 
something()
  {
    echo 
__CLASS__// foo_bar_baz
   
var_dump($this);
  }

  public function 
call()
  {
    echo 
self::something(); // self
   
echo parent::something(); // parent
   
echo foo::something(); // grandparent
 
}
}

error_reporting(-1);

$obj = new foo_bar_baz();
$obj->call();

// Output similar to:
// foo_bar_baz
// object(foo_bar_baz)[1]
// foo_bar
// object(foo_bar_baz)[1]
// foo
// object(foo_bar_baz)[1]

?>
2010-09-19 12:37:58
http://php5.kiev.ua/manual/ru/language.oop5.inheritance.html
The Idea that multiple inheritence is not supported is correct but with tratits this can be reviewed.

for e.g.
 
<?php
trait  custom
{
     public function 
hello()
     {
          echo 
"hello";
     }
}

trait 
custom2
{
       public function 
hello()
       {
            echo 
"hello2";
       }
}

class 
inheritsCustom
{
        use 
customcustom2
       
{
             
custom2::hello insteadof custom;
        }
}

$obj = new inheritsCustom();
$obj->hello();
?>
2015-07-01 08:59:16
http://php5.kiev.ua/manual/ru/language.oop5.inheritance.html
I think the best way for beginners to understand inheritance is through a real example so here is a simple example I can gave to you 

<?php

class Person
{
    public 
$name;
    protected 
$age;
    private 
$phone;

    public function 
talk(){
       
//Do stuff here
   
}

    protected function 
walk(){
       
//Do stuff here
   
}

    private function 
swim(){
       
//Do stuff here
   
}
}

class 
Tom extends Person
{
   
/*Since Tom class extends Person class this means 
        that class Tom is a child class and class person is 
        the parent class and child class will inherit all public 
        and protected members(properties and methods) from
        the parent class*/

     /*So class Tom will have these properties and methods*/

     //public $name;
     //protected $age;
     //public function talk(){}
     //protected function walk(){}

     //but it will not inherit the private members 
     //this is all what Object inheritance means
}
2017-06-12 01:50:36
http://php5.kiev.ua/manual/ru/language.oop5.inheritance.html
Автор:
PHP7 gives you a warning if you redeclare a function in a child class with different parameters. For example:

class foo {
     function print($text='') {
          print text;
     }
}

class bar extends foo {
      function print($text1='',$text2='') {
           print text1.text2
      }
}

will give a PHP Warning:  Declaration of bar::print($text1 = '', $text2 = '') should be compatible with foo::print($text= '').
2019-01-25 09:21:17
http://php5.kiev.ua/manual/ru/language.oop5.inheritance.html

    Поддержать сайт на родительском проекте КГБ