2011-08-09 26 views
2

は可能ですか?何かのような(動作しません):PHP:連想配列の匿名関数

$prototype = array(
    'ext' => function ($args) 
    { 
     $ext = NULL; 
     if (in_array(func_get_arg(0), array('js', 'css'))) 
      return $ext; 
     else 
      return 'js'; 
    }, 
); 
+0

試しましたか?それは間違いを起こしましたか?答えに「はい」が欲しいですか?詳細情報を追加してください。 – Gordon

+1

私にとってはうまく動作します(PHP 5.3.6)。 PHP 5.3で匿名関数が導入されましたので、アップグレードしてください。 –

+0

あなたの構文は=エラーです。最後の '}'の後の '、'を削除してください。 – elslooo

答えて

3

はい。唯一の制限は、オブジェクトにキャストできないことです。

<?php 
    $foo = array(
     'bar' => function($text) 
     { 
      echo $text; 
     } 
    ); 
    $foo['bar']('test'); //prints "test" 

    $obj = (object)$foo; 
    $obj->bar('test'); //Fatal error: Call to undefined method stdClass::bar() in /code/REGnPf on line 11 
?> 
+0

これでオブジェクトにキャストできます(エラーはありません)。定義されていないメソッドを使用しているため、後でエラーが発生します。これは、 "bar"という名前のメソッドがないためです。 「bar」という名前のフィールドがあります。すなわち、 '$ temp = $ obj - > $ bar; $ temp(); 'フィールドとメソッドは、PHPでは完全に別です。 – newacct

+0

@newacct、その場合はより良い言葉遣いをお勧めしますか? :) –

+0

配列がプロパティ初期化子の一部である場合、匿名関数を含む複雑な式は機能しないことに注意してください。 –

4

それは確かです:

<?php 
$array = array(
     'func' => function($a) { 
       return $a + 2; 
     } 
); 
echo $array['func'](3); 
?> 

これはあなたに5 =を与えます)!