Вызов функции расширенного класса из родительского класса - PullRequest
4 голосов
/ 17 января 2012

Я новичок в ОО PHP. Есть вопросы.

class a {
protected function a1 (){
...
}
}

class b extends a {
public function b1(){
...
}
}

Допустим, у нас есть 2 класса, как описано выше. Я вызываю метод b, как в примере ниже

class a {
var $b;
function __construct()
{
$b= new b();
}
protected function a1 (){
$b->b1();    
 }
}

class b extends a {
public function b1(){
...
}
}

Я знаю, что можно вызывать метод родительского класса из расширенного класса, но мне интересно, возможен ли обратный путь? Я имею в виду вызов метода расширенных классов из родительского класса (в данном случае, class b - метод из class a) без объявления в __contruct, просто с помощью $this->b() ;?

Ответы [ 2 ]

7 голосов
/ 27 января 2012

Да, вы можете вызвать метод в расширяющем классе.

<?php
class a 
{
    public function a1 ()
    {
        $this->b1();    
    }

    protected function b1()
    {
        echo 'This is in the a class<br />';
    }
}

class b extends a 
{
    protected function b1()
    {
        echo 'This is in the b class<br />';
    }
}

class c extends a
{
    protected function b1()
    {
        echo 'This is in the c class<br />';
    }
}

$a = new a();
$a->a1();

$b = new b();
$b->a1();

$c = new c();
$c->a1();   
?>

Это приведет к:

Это в классе
Это в классе б
Это в классе с

Вас также могут заинтересовать абстрактные классы http://us3.php.net/manual/en/language.oop5.abstract.php

4 голосов
/ 17 января 2012

использовать магические методы PHP __call или __callStatic

Reference

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...