は可能ですか?何かのような(動作しません):PHP:連想配列の匿名関数
$prototype = array(
'ext' => function ($args)
{
$ext = NULL;
if (in_array(func_get_arg(0), array('js', 'css')))
return $ext;
else
return 'js';
},
);
は可能ですか?何かのような(動作しません):PHP:連想配列の匿名関数
$prototype = array(
'ext' => function ($args)
{
$ext = NULL;
if (in_array(func_get_arg(0), array('js', 'css')))
return $ext;
else
return 'js';
},
);
はい。唯一の制限は、オブジェクトにキャストできないことです。
<?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
?>
これでオブジェクトにキャストできます(エラーはありません)。定義されていないメソッドを使用しているため、後でエラーが発生します。これは、 "bar"という名前のメソッドがないためです。 「bar」という名前のフィールドがあります。すなわち、 '$ temp = $ obj - > $ bar; $ temp(); 'フィールドとメソッドは、PHPでは完全に別です。 – newacct
@newacct、その場合はより良い言葉遣いをお勧めしますか? :) –
配列がプロパティ初期化子の一部である場合、匿名関数を含む複雑な式は機能しないことに注意してください。 –
それは確かです:
<?php
$array = array(
'func' => function($a) {
return $a + 2;
}
);
echo $array['func'](3);
?>
これはあなたに5 =を与えます)!
試しましたか?それは間違いを起こしましたか?答えに「はい」が欲しいですか?詳細情報を追加してください。 – Gordon
私にとってはうまく動作します(PHP 5.3.6)。 PHP 5.3で匿名関数が導入されましたので、アップグレードしてください。 –
あなたの構文は=エラーです。最後の '}'の後の '、'を削除してください。 – elslooo