PHP是否具有对象的简短语法?

时间:2009-01-18 20:07:01

标签: php object

在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,还是应该只使用关联数组?

7 个答案:

答案 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_encodejson_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);