Поддерживает ли PHP короткий синтаксис для объектов?

В 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, как создание объекта, или я должен просто использовать ассоциативные массивы?

Для простых объектов вы можете использовать синтаксис ассоциативного массива и литье для получения объекта:

 <?php $obj = (object)array('foo' => 'bar'); echo $obj->foo; // yields "bar" 

Но, глядя на это, вы можете легко понять, насколько бесполезно это (вы просто оставите его как ассоциативный массив, если ваша структура была такой простой).

Было предложено реализовать синтаксис этого массива . Но он был отклонен.


Обновление Сокращенный синтаксис для массивов был пересмотрен, принят и теперь выпущен с PHP 5.4 .

Но до сих пор нет стенограммы для объектов. Вам, вероятно, потребуется явно передать объект :

 $obj = (object) ['foo'=>'bla', 'bar'=>2]; 

Начиная с PHP 5.4, вы можете сделать это:

 $array = ['foo'=>'bla', 'bar'=>2]; 

Это не намного короче, но вы оцените это, если вам нужно использовать много жестко закодированных вложенных массивов (что не совсем необычно).

Если вам нужен объект, вам все равно нужно будет отбросить каждый массив:

 $object = (object) ['foo'=>'bla', 'bar'=>2]; 

Согласно новым синтаксисам PHP,

Вы можете использовать

 $array = [1,2,3]; 

А для ассоциативных массивов

 $array = ['name'=>'Sanket','age'=>22]; 

Для объектов вы можете придать массив объекту

 $object = (object)['name'=>'Sanket','age'=>22]; 

В PHP нет стенографирования объектов, но вы можете использовать точный синтаксис Javascript, если используете функции json_encode и json_decode .

Как и идея 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); 

Метод, предоставляемый crescentfresh, работает очень хорошо, но у меня возникла проблема с добавлением большего количества объектов к объекту. чтобы обойти эту проблему, я реализовал splray 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"; 

С этим подходом вы можете многое сделать, чтобы упростить создание объектов даже из массивов, надеюсь, что это поможет.