2013-12-12 5 views
-1

Я пытаюсь что-то сделать, и, похоже, я, кажется, что-то упускаю. Я новичок в этом извините.PHP: Как я могу получить доступ к функции класса children из переменной родительского класса?

class PARENT_API { 
    function __construct() { 

    } 
} 
$api = new PARENT_API(); 

class common extends PARENT_API { 
    function foo(){ 
     return 'Test!'; 
    } 
} 

Почему я не могу просто так сделать?

echo $api->common->foo(); 

Я просто пытаюсь организовать большой код на классы, не могу ли я сделать это, что мне не хватает?

+1

Если родитель должен получить доступ к дочерней функции, вы неправильно выполняете ООП. http://en.wikipedia.org/wiki/Liskov_substitution_principle –

+0

Я видел, как плагины делают это. $ parent-> childclass-> function() или переменная. Я что-то пропускаю? – user2780294

+0

Это не то, как вы делаете ООП в php (или на любом другом языке, который я знаю). Пожалуйста, прочитайте http://www.php.net/manual/en/language.oop5.inheritance.php –

ответ

0

Вы должны получить доступ к методу foo() нравится эта

$api_1 = new common(); 
$api_1->foo(); 

Я видел плагинов делают это. $ parent-> childclass-> function() или переменная. Я что-то пропускаю?

Я действительно сомневаюсь в этом. Я не думаю, что Родитель может наследовать ребенка.

0

Прежде всего, ваша функция класса ребенок это:

class common extends PARENT_API { 
    function foo(){ 
     echo 'Test!'; 
    } 
} 

Но вы тогда называть это так:

echo $api->common->foo(); 

Два echo «S? Изменение функции класса на это так, возвращается выход:

class common extends PARENT_API { 
    function foo(){ 
     return 'Test!'; 
    } 
} 

Кроме того, следует назвать:

$api_common = new common(); 
echo $api_common->foo(); 

EDIT Когда вы делаете class common extends PARENT_API вы создаете новый common класс. Поэтому вы не можете позвонить PARENT_API, а затем ожидать, что он будет волшебным. Вам необходимо позвонить common.

+0

Итак, нет способа получить foo() без вызова дочернего класса new Child()? – user2780294

+0

Нет. Посмотрите на мой отредактированный ответ. Вы не можете делать то, что вы описываете. – JakeGould

1

Я думаю, что вы путаете зависимостей и расширяемости ...

Dependency: Родительский объект может понадобиться дочерний объект для выполнения некоторых операций под прикрытием для него. Он также позволяет легко переключать объект children и изменять способ работы родителя.

Расширяемость: Класс детей может наследоваться от родительского класса. Можно сказать, что BClass также является AClass и может делать то же самое, но несколько иначе. Только BClass может оценивать AClass, потому что BClass также является AClass, но обратное неверно!

Это вы имели в виду?

Смежные вопросы