2013-12-12 210 views
-1

我正在尝试做点什么,显然我似乎错过了一些东西。我对这件事感到抱歉。PHP:我如何从父类变量访问子类功能?

class PARENT_API { 
    function __construct() { 

    } 
} 
$api = new PARENT_API(); 

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

为什么我不能这样做?

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

我只是想把大代码组织成类,我不能这样做,我失踪了吗?

+1

如果父母需要访问子功能,那么你正在做OOP错误。 http://en.wikipedia.org/wiki/Liskov_substitution_principle –

+0

我看过插件。 $ parent-> childclass-> function()或变量。我可以忽略一些东西吗 – user2780294

+0

这不是你如何做OOP在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的?更改类函数将此所以返回的输出:当你做一个class common extends PARENT_API要创建一个新的common

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

编辑

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

而且,它应该被称为。所以你不能打电话PARENT_API,然后期望它神奇地延长。您需要致电common

+0

所以没有办法获得foo()而不调用子类new Child()? – user2780294

+0

不需要看我编辑的答案。你不能做你所描述的。 – JakeGould

1

我认为你是混乱的依赖和可扩展性...

依赖:父对象可能需要一个子对象覆盖它在执行某些操作。它还允许您轻松切换子对象并更改父对象的操作方式。

可扩展性:子类可以从父类继承。它可以说,BClass也是一个AClass,可以做同样的事情,但略有不同。只有BClass才能评估AClass,因为BClass也是一个AClass,但事实并非如此!

这是你的意思吗?