Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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


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

Но объектов нет. Вероятно, вам нужно явно указать объект:

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

Ответ 3

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

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

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

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

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

Ответ 4

В соответствии с новыми синтаксисами PHP,

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

$array = [1,2,3];

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

Метод, предоставляемый 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";

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