php5中引用的问题

时间:2011-04-15 23:56:10

标签: php class object reference

让我从代码开始:

<?php
class Father{
    function Father(){
        echo 'A wild Father appears..';
    }

    function live(){
        echo 'Some Father feels alive!';
    }
}

class Child{
    private $parent;
    function Child($p){
        echo 'A child is born :)';
    }

    function setParent($p){
        $parent = $p;
    }

    function dance(){
        echo 'The child is dancing, when ';
        $parent -> live();
    }
}

$p = new Father();
$p -> live();
$c = new Child($p);
$c -> dance();

?>

运行时我在第24行上遇到错误,说“PHP致命错误:在第24行的../test.php中的非对象上调用成员函数live()” 我已经在网上搜索了一段时间,无法找到解决方案。 有人能帮助我理解php5吗?

3 个答案:

答案 0 :(得分:3)

您需要使用$this->parent->live()来访问成员变量。此外,您必须将父对象分配给它。

class Child{
    private $parent;
    function __construct($p){
        echo 'A child is born :)';
        $this->parent = $p; // you could also call setParent() here
    }

    function setParent($p){
        $this->parent = $p;
    }

    function dance(){
        echo 'The child is dancing, when ';
        $this->parent -> live();
    }
}

除此之外,您应该将构造函数方法重命名为__construct,这是PHP5中的建议名称。

答案 1 :(得分:2)

您没有在构造函数中调用setParent 这将解决它:

function Child($p){
    echo 'A child is born :)';
    $this->setParent($p);
}

答案 2 :(得分:0)

首先,使用__construct关键字在PHP5中使用构造函数的首选方法。 当您访问班级成员时,您应该使用$this,如果您尝试parent成员,则不会使用function setParent($p){ $parent = $p; }

function setParent($p){
        $this->parent = $p;
    }

像这样:

   function dance(){
        echo 'The child is dancing, when ';
        $parent -> live();
    }

而且:

   function dance(){
        echo 'The child is dancing, when ';
        $this->parent -> live();
    }

对此:

$p = new Father();
$p -> live();
$c = new Child();
$c -> setParent($p);
$c -> dance();

你将以此结束:

setParent

您不需要将父项传递给子构造函数,因为您将在{{1}}方法中设置它。