Генерация объекта php, два уровня глубиной

1

Я новичок в php - объектах и массивах, особенно. Исходя из мира JavaScript, у меня проблемы с пониманием правильного пути построения объектов, которые могут быть легко повторены.

Я хотел бы создать объект (или массив - хотя я подозреваю, что объект будет более подходящим) со следующей структурой:

$client_body:
    $cst:
        $title: 'Unique string'
        $copy: function_result()
    $ser:
        $title: 'Unique string'
        $copy: function_result()
    $imp
        $title: 'Unique string'
        $copy: function_result()
    ...

Я пытался с вариациями в следующем, но с многочисленными ошибками:

$client_body = new stdClass();
$client_body->cst->title = 'Client case study';
$client_body->cst->copy = get_field('client_cst');
$client_body->ser->title = 'Our service';
$client_body->ser->copy = get_field('client_ser');
...

И кажется, что, используя этот подход, мне пришлось бы использовать new stdClass вызов new stdClass с каждым новым дополнением верхнего уровня, что кажется немного подробным.

Может ли кто-нибудь указать мне в правильном направлении?

  • 1
    Большинство людей используют массивы, а не объекты для такого рода вещей.
  • 0
    @ Бармар - есть ли для этого особая причина? Интересно, если это связано с производительностью или предпочтениями.
Теги:
object
arrays

3 ответа

4
Лучший ответ

Вы можете просто придать массив массиву объекту:

$client_body = (object)array(
   "cst" => (object)array(
       "title" => "Unique string",
       "copy" => function_result() 
   )
);
  • 0
    Спасибо Даан. Это все еще кажется мне довольно многословным, но я начинаю думать, что это связано с тем, к чему я привык из JS. Кроме того, комментарий Бармара предполагает, что массив был бы лучше ... извините за мое незнание, но приведет ли это на самом деле к объекту или к массиву, который php рассматривает как объект? (Не знаком с тонкостями языка).
  • 0
    $client_body будет реальным объектом после выполнения этого кода. Как предположил Бармар, массив является предпочтительным и наиболее используемым способом.
0

Или вы можете использовать json_encode ($ client_body, TRUE);

0

Вы можете попробовать этот класс объектов больше ООП:

<?php 

class ClientBody{
    protected $cst;
    protected $ser;
    protected $imp;

    public function __construct($cst = '', $ser ='', $imp = '')
    {
        $this->cst = $cst;
        $this->ser = $ser;
        $this->imp = $imp;
    }


    public function getCst()
    {
        return $this->cst;
    }

    public function getSer()
    {
        return $this->ser;
    }

    public function getImp()
    {
        return $this->imp;
    }

    public function setCst($value)
    {
       $this->cst = $value;
    }

    public function setSer($value)
    {
       $this->ser = $value;
    }

    public function setImp($value)
    {
       $this->imp = $value;
    }
}

$myObject = new ClientBody('toto', 'titi', 'tata');

echo $myObject->getCst(); // output 'toto'
echo $myObject->getSer(); // output 'titi'
echo $myObject->getImp(); // output 'tata'
  • 0
    Спасибо, хотя в этот раз я думаю, что это излишне для моих целей.
  • 0
    Это зависит от вашей цели, это правда, но у вас есть пример того, как создать класс объекта в вашем будущем коде, который легко использовать повторно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню