2017-11-27 4 views
2

配列にdogオブジェクトを追加したいのですが、配列の後ろにvar_dumpを追加しますが、配列は空のままです。私はテオップ概念か何かの何らかのルールを破っていますか?前もって感謝します!呼び出し可能な結果を​​配列に割り当てることができません

あなたは自分の MyClassコンストラクタに小さな変更必要
class Dog 
{ 
    public $name; 
    public $bread; 
} 

class MyClass 
{ 
     public $dogArr = []; 

     public function __construct($key, callable $callback){ 
      $dogArr[$key] = $callback(); 
     } 
} 

public function actionTest(){ 

    $newDog = new \backend\components\MyClass("first", function(){ 
      $dog = new \backend\components\Dog(); 
      $dog->name = "Archi"; 
      $dog->bread = "Pomeran"; 
      return $dog; 
     }); 

     var_dump($newDog->dogArr); 

} 
+1

変数であることを保証する簡単な方法はありませんが動作するはずですあなたが更新する予定のもの。単体テスト(または静的解析)は非常に役に立ちますが、この場合はすぐに失敗します。 –

答えて

3

:そうでなければ、あなただけのローカルに値を設定している

$this->dogArr[$key] = $callback(); 

$dogArr[$key] = $callback(); 

変更をclassプロパティではなく変数です。

+1

私にそれを打つ、https://3v4l.org/M3uFJ –

+0

ありがとう! –

0

こんにちはuは、クラスのプロパティにアクセスしたい場合uは、この演算子に

続きを自己または$を使用する必要がありますが

class Dog 
{ 
    public $name; 
    public $bread; 
} 

class MyClass 
{ 
     public $dogArr = []; 

     public function __construct($key, callable $callback){ 
      $this->dogArr[$key] = $callback(); 
     } 
} 

public function actionTest(){ 

    $newDog = new \backend\components\MyClass("first", function(){ 
      $dog = new \backend\components\Dog(); 
      $dog->name = "Archi"; 
      $dog->bread = "Pomeran"; 
      return $dog; 
     }); 

     var_dump($newDog->dogArr); 

} 

actionTest(); 
関連する問題