0

我对 php 还是很陌生,但我一直在尝试查找(如果可能的话)从子类调用执行不同子函数的父函数。我读过子类彼此不知道,但我认为父类可能是。

我确实已经搜索了几个小时,但我还没有找到我认为会有所帮助的东西。

以下将输出:

::dad Class initiated::
::daughter Class initiated::
::son Class initiated::

Call to a member function test1() on a non-object in ....  on line 15

代码:

class dad {  

    function dad() 
    { 
        echo '::'.get_class($this).' Class initiated::<br>';
        $this -> daughter = new daughter();
        $this -> son = new son();
    }

    public function afunction($string) {

        return $this->son->test1($string);

    }

}

class daughter extends dad {

    function daughter() {
    echo '::'.get_class($this).' Class initiated::<br>';

    }

    public function test() {

        parent::afunction("test");

    }

}

class son extends dad {

    function son() {
    echo '::'.get_class($this).' Class initiated::<br>';

    }

    public function test1($string) {

        echo $string;

    }

}


$dad = new dad(); 
$dad->daughter->test();

任何/所有帮助表示赞赏。

4

3 回答 3

0

这应该可以帮助您:PHP:如何从父类调用子类的函数

通常,以您尝试的方式调用子类方法是不正确的。子类旨在扩展现有的(在大多数情况下功能齐全)类,它不应该依赖于现有的子类。

于 2012-04-07T19:20:35.127 回答
0

不要使用诸如 dad() 或类似的用户魔术函数 __construct() 之类的构造函数。我很确定你在爸爸班上没有可见的外地女儿。你必须定义它。

于 2012-04-07T19:21:52.647 回答
0

长话短说:daddaughterson单独的对象,调用函数形式parent仅在一个对象内起作用。在您的示例daughter中不知道绑定到dad对象,仅它从它继承属性和方法。为了让它工作,你应该将父对象传递给孩子,让他们知道他们的父母,并在这个父对象上调用函数:

class dad {  
    function dad(){ 
        echo '::'.get_class($this).' Class initiated::<br>';
        $this -> daughter = new daughter($this);
        $this -> son = new son($this);
    }

    public function afunction($string){
       return $this->son->test1($string);
    }
}

class daughter extends dad {
    function daughter($father) {
        $this->father = $father;
        echo '::'.get_class($this).' Class initiated::<br>';
    }

    public function test() {
        $this->father->afunction("test");
    }
}

class son extends dad {
    function son($father) {
        $this->father = $father;
        echo '::'.get_class($this).' Class initiated::<br>';
    }

    public function test1($string) {
        echo $string;
    }
}

$dad = new dad(); 
$dad->daughter->test();
于 2012-04-07T19:37:27.763 回答