生成一个php对象,有两层深度

生成一个php对象,有两层深度,php,arrays,object,Php,Arrays,Object,我是php新手,尤其是对象和数组。我来自一个JavaScript世界,在理解构造对象的正确方法时遇到了一些困难,这些对象可能很容易被迭代 我想创建一个对象或数组-尽管我怀疑对象更适合以下结构: $client_body: $cst: $title: 'Unique string' $copy: function_result() $ser: $title: 'Unique string' $copy: functio

我是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');
...
似乎,使用这种方法,我必须对每个新的顶级添加使用一个新的stdClass调用,这似乎有点冗长


有人能给我指一下正确的方向吗?

你可以把一个数组键入一个对象:

$client_body = (object)array(
   "cst" => (object)array(
       "title" => "Unique string",
       "copy" => function_result() 
   )
);

您可以将数组类型转换为对象:

$client_body = (object)array(
   "cst" => (object)array(
       "title" => "Unique string",
       "copy" => function_result() 
   )
);

您可以尝试使用此对象类进行更多OOP:

<?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'

您可以尝试使用此对象类进行更多OOP:

<?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'

或者您可以使用json_decode$client_body,TRUE

或者您可以使用json_decode$client_body,TRUE

大多数人使用数组而不是对象来做这类事情。@Barmar-有什么特别的原因吗?想知道这是否与性能或偏好有关。大多数人使用数组而不是对象来做这类事情。@Barmar-有什么特别的原因吗?不知道这是否与性能或偏好有关。谢谢Daan。这对我来说似乎仍然很冗长,但我开始认为这与我习惯于JS的内容有关。此外,Barmar的评论表明数组会更好。。。很抱歉我的无知,但这会导致一个对象,还是会导致一个php视为对象的数组?不熟悉语言的微妙之处。$client_body将在执行此代码后成为实际对象。正如Barmar所建议的,这是最受欢迎和最常用的方法。谢谢Daan。这对我来说似乎仍然很冗长,但我开始认为这与我习惯于JS的内容有关。此外,Barmar的评论表明数组会更好。。。很抱歉我的无知,但这会导致一个对象,还是会导致一个php视为对象的数组?不熟悉语言的微妙之处。$client_body将在执行此代码后成为实际对象。正如Barmar建议的那样,array是首选和最常用的方式。谢谢,尽管我认为这一次对于我的目的来说太过分了。这取决于你的目的是什么,这是真的,但是你有一个关于如何在未来的代码上创建一个易于重用的对象类的示例。谢谢,虽然我认为这一次对我来说太过分了。这取决于你的目的是什么,这是真的,但你有一个例子,说明了如何在未来的代码中创建一个易于重用的对象类