2017-04-24 32 views
0

2つのクラスが抽象クラスを継承しています。どちらのクラスも、他のクラスの項目の配列である "content"というプライベートメソッドを持っています。 私はここで、アイテムオブジェクトB. から親オブジェクトAを取得する必要があり、クラスAIの「コンテンツ」配列にオブジェクトBを追加した後は一例であり、それはそれを見て簡単です:オブジェクト配列から上位オブジェクトを取得するアイテム

<?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(); 
 

 
?>

抽象クラスで、$ self(バットマンオブジェクト)を設定するパートナーを追加するたびに、$ fatherというプライベートメソッドを追加しようとしましたが、PHPエラーログに "Object of classバットマンを文字列に変換できませんでした。 "

+0

なし? – Vini

答えて

1

Uは" $ t彼の "父親を追加する。 PHPでは$ selfはありません。すべての後にヒーローに「パートナー」フィールドを追加する方法について、それはすべての英雄に共通する方法

<?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(); 
 

 
?>

+0

ありがとうMeffen、私は私の答えでエラーを起こしました、実際には$ selfの代わりに$ thisを使用しましたが、エラーは$ father宣言の "protected"ではありませんでした。父親が私的なエラーを生成した場合、保護されたすべてがうまくいった。なぜなのかご存知ですか? – prelite

関連する問題