PHP中的对象-> toArray()转换

时间:2018-09-21 09:59:23

标签: php magic-methods

我想将一个Object强制转换为一个数组,所以我可以对其进行循环。
我知道:

 if request.method == 'POST':
    qform = QuestionForm(request.POST)
    rform = ResponseForm(request.POST)
    if qform.is_valid() and rform.is_valid():
        qf = qform.save()
        rf = rform.save()
        return render(request, 'app/adddatatest.html', {
           "qform": QuestionForm(),
           "rform": ResponseForm(),
        })

存在。但是我想要类似自定义

$array = (array) $object 

数组方法。
到目前为止,我知道

__toString() 

不存在。
问题:
我可以自定义这种魔术方法吗?
(我也知道,我可以通过调用返回数组的函数来解决此问题)

我想将对象转换为自定义数组:

__toArray()

不通过调用函数进行转换

foreach($object as $key=>$value) {}

即使这是最简单的方法……

2 个答案:

答案 0 :(得分:0)

这很容易。只需使用get_object_vars()

https://secure.php.net/manual/en/function.get-object-vars.php

<?php

class Person
{
    private $name = 'delboy1978uk';
    private $age = 40;

    public function toArray()
    {
        return get_object_vars($this);
    }
}


$person = new Person();
var_dump($person->toArray());

哪个给你:

array(2) { ["name"]=> string(12) "delboy1978uk" ["age"]=> int(40) }

参见此处:https://3v4l.org/1TWrG

现在,假设您要在几个班级中使用它。您可以创建一个基类并对其进行扩展,也可以使其成为特征:

<?php

class ArrayableObject
{
    public function toArray()
    {
        return get_object_vars($this);
    }
}

class Person extends ArrayableObject
{
    private $name = 'delboy1978uk';
    private $age = 40;
}

我认为,如果在特征中使用它,则更加灵活,那么您就不必局限于基类:

<?php    

trait CastableToArray
{
    public function toArray()
    {
        return get_object_vars($this);
    }
}

class Person
{
    use CastableToArray;

    private $name = 'delboy1978uk';
    private $age = 40;
}

答案 1 :(得分:0)

您是否考虑过使用ArrayObject

<h:head>
    <title> Index </title>
    <link rel="stylesheet" href="indexCss.css" type="text/css"/>
</h:head>