从对象数组项中获取更高级别的对象

时间:2017-04-24 12:35:05

标签: php class object abstract-class

我有2个类,它们都扩展了一个抽象类。这两个类都有一个名为“content”的私有方法,它是另一个类的项目数组。 一旦我将对象B添加到类A的“content”数组中,我需要从项目对象B中获取父对象A. 这是一个例子,它更容易看到它:

<?php 

abstract class heroes {
    private $tag;
    private $content = array();
    
    function __construct($tag) {
        $this->tag = $tag;
    }
    
    public function getContents() {
        return $this->content;
    }
    
    protected function addContent($obj) {
        $this->content[] = $obj;
        return $obj;
    }

}

final class batman extends heroes {

    public function addPartner() {
        return $this->addContent(new robin());
    }
}

final class robin extends heroes {

    private $capes;
    
    public function dieAtFirstFight() {
        return BATMAN OBJ???
    }
    
}

$batman = new batman();
$batman = $batman->addPartner()->dieAtFirstFight();

?>

我在抽象类中尝试添加一个名为$ father的私有方法,其中每次我添加一个伙伴我设置$ self(这是蝙蝠侠对象)但在php错误日志中我得到错误“类Batman可以对象不能转换为字符串“

1 个答案:

答案 0 :(得分:1)

你必须使用&#34; $ this&#34;添加父亲。 php中没有$ self。

&#13;
&#13;
<?php 

abstract class heroes {
    private $tag;
    private $content = array();
    protected $father;
    
    function __construct($tag) {
        $this->tag = $tag;
    }
    
    public function getContents() {
        return $this->content;
    }
    
    protected function addContent($obj) {
        $this->content[] = $obj;
        $obj->setFather($this);
        return $obj;
    }
    
    protected function setFather($father) {
        $this->father = $father;
    }

}

final class batman extends heroes {

    public function addPartner() {
        return $this->addContent(new robin('tag'));
    }
}

final class robin extends heroes {

    private $capes;
    
    public function dieAtFirstFight() {
        return $this->father;
    }
    
}

$batman = new batman('tag');
$batman = $batman->addPartner()->dieAtFirstFight();

?>
&#13;
&#13;
&#13;