在javascript中,您可以轻松创建对象和数组,如下所示:
var aObject = { foo:'bla', bar:2 };
var anArray = ['foo', 'bar', 2];
PHP中类似的东西是否可能? 我知道你可以使用数组函数轻松创建一个数组,这几乎不是javascript语法的工作,但有没有类似的语法来创建对象?或者我应该只使用关联数组?
$anArray = array('foo', 'bar', 2);
$anObjectLikeAssociativeArray = array('foo'=>'bla',
'bar'=>2);
总结一下:
PHP是否具有像对象创建这样的javascript,还是应该只使用关联数组?
答案 0 :(得分:44)
对于简单对象,您可以使用关联数组语法和强制转换来获取对象:
<?php
$obj = (object)array('foo' => 'bar');
echo $obj->foo; // yields "bar"
但是看着你可以很容易地看出它是多么无用(如果你的结构那么简单,你就把它留作一个关联数组。)
答案 1 :(得分:40)
有一个proposal to implement this array syntax。 但它被拒绝了。
更新数组的缩写语法已经过重新讨论,接受,现在位于way be released with PHP 5.4。
但仍然没有对象的简写。您可能需要显式转换为 object :
$obj = (object) ['foo'=>'bla', 'bar'=>2];
答案 2 :(得分:10)
从PHP 5.4开始,您可以这样做:
$array = ['foo'=>'bla', 'bar'=>2];
它不会短得多,但如果您需要使用大量硬编码嵌套数组(这并不完全不常见),您会很感激。
如果你想要一个对象,你仍然需要转换每个数组:
$object = (object) ['foo'=>'bla', 'bar'=>2];
答案 3 :(得分:7)
根据新的PHP语法,
您可以使用
$array = [1,2,3];
对于关联数组
$array = ['name'=>'Sanket','age'=>22];
对于对象,您可以将数组类型转换为对象
$object = (object)['name'=>'Sanket','age'=>22];
答案 4 :(得分:3)
PHP中没有对象简写,但如果您使用json_encode和json_decode函数,则可以使用Javascript的确切语法。
答案 5 :(得分:2)
crescentfresh提供的方法效果很好但是我在向对象添加更多属性时遇到了问题。为了解决这个问题,我实现了spl ArrayObject。
class ObjectParameter extends ArrayObject {
public function __set($name, $value) {
$this->$name = $value;
}
public function __get($name) {
return $this[$name];
}
}
//creating a new Array object
$objParam = new ObjectParameter;
//adding properties
$objParam->strName = "foo";
//print name
printf($objParam->strName);
//add another property
$objParam->strUser = "bar";
使用这种方法可以做很多事情,使您可以轻松地从阵列创建对象,希望这会有所帮助。
答案 6 :(得分:1)
与json_decode想法一样,写了这个:
function a($json) {
return json_decode($json, true); //turn true to false to use objets instead of associative arrays
}
//EXAMPLE
$cat = 'meow';
$array = a('{"value1":"Tester",
"value2":"'.$cat.'",
"value3":{"valueX":"Hi"}}');
print_r($array);