2017-05-29 6 views
0

PHPで配列の値として匿名関数を格納することは可能ですが、なぜクラスコンテキストでNULLを返すのでしょうか?PHPは配列(クラスコンテキスト)に匿名関数を格納します

class firstClass { 

    public static $functions = array(); 

    function __construct() 
    { 

     self::$functions += array("echo" => function($text) { echo $text; }, "fruit" => "apple"); 

    } 

} 

class secondClass { 

    function __construct() 
    { 

     var_dump(firstClass::$functions); // returns array(1){ ["fruit"] => string(5) => "apple") 
     var_dump(firstClass::$functions["echo"]); // returns NULL 

    } 

} 


$class = new firstClass; 
+0

ファーストクラスのコンストラクタは決してありませんと呼ばれる。 – user3409662

答えて

0

を使用し、呼び出すことはありません - 私はあなたのコードをテストするとき、私は期待される結果(すなわち、ないNULL)を取得します。 多分これは仕事ができる、次のコードを試してみてください。以下のように(?ない場合は、お使いのPHPのバージョンをアップグレードしてみてください)

// ---------------------------------------------------- 
// First try with a simple array, outside a class 
// ---------------------------------------------------- 

$test_array = array(
    "string" => "some string" , 
    "function" => function() { 
     echo 'i am an anonymous function outside a Class'; 
    } 
); 

var_dump($test_array); 



// ---------------------------------------------------- 
// Now try in a Class context 
// ---------------------------------------------------- 

class classContext { 

    public static $functions = array(); 

    public function __construct() { 
     self::$functions += array(
      "string" => "some string in classContext" , 
      "function" => function() { 
       echo 'i am an anonymous function inside a Class'; 
      } 
     ); 
    } 

} 

class secondClass { 

    public function __construct() { 
     var_dump(classContext::$functions); 
     var_dump(classContext::$functions['function']); 
    } 
} 

new classContext; 
new secondClass; 

結果は次のようになります。

array(2) { 
    ["string"]=> 
     string(11) "some string" 

    ["function"]=> 
     object(Closure)#1 (0) {} 
} 

array(2) { 
    ["string"]=> 
     string(27) "some string in classContext" 

    ["function"]=> 
     object(Closure)#3 (1) { 
      ["this"]=> object(classContext)#2 (0) {} 
     } 
} 

object(Closure)#3 (1) { 
    ["this"]=> object(classContext)#2 (0) {} 
} 
+0

これは実際に動作します!ありがとうございました! – Ralph

+0

私の喜び@Ralph :) – sammysaglam

1

FirstClassのコンストラクタそれはあなたがNULLを取得していることをおかしいあなたは、静的変数

+0

私は、initalisationを追加するのを忘れて、申し訳ありません。しかし、正常な値が動作し、それは非常に奇妙です.. – Ralph

関連する問題