我喜欢在JavaScript中创建匿名类型的对象很容易:
//JavaScript
var myObj = {
foo: "Foo value",
bar: "Bar value"
};
console.log(myObj.foo); //Output: Foo value
所以我总是尝试像javascript一样在PHP中编写这种对象:
//PHP >= 5.4
$myObj = (object) [
"foo" => "Foo value",
"bar" => "Bar value"
];
//PHP < 5.4
$myObj = (object) array(
"foo" => "Foo value",
"bar" => "Bar value"
);
echo $myObj->foo; //Output: Foo value
但这基本上是一个数组,因此您无法执行将匿名函数分配给js这样的属性的操作:
//JavaScript
var myObj = {
foo: "Foo value",
bar: function(greeting) {
return greeting + " bar";
}
};
console.log(myObj.bar("Hello")); //Output: Hello bar
//PHP >= 5.4
$myObj = (object) [
"foo" => "Foo value",
"bar" => function($greeting) {
return $greeting . " bar";
}
];
var_dump($myObj->bar("Hello")); //Throw 'undefined function' error
var_dump($myObj->bar); //Output: "object(Closure)"
好吧,您可以做到,但是IMO不实用/不干净:
$barFunc = $myObj->bar;
echo $barFunc("Hello"); //Output: Hello bar
另外,使用此合成器,您会发现一些有趣的惊喜,但在大多数情况下都可以正常工作。
$var = (object) (boolean) (string) (int) (array) new StdClass;
要知道,只是为了安全。