Object -> toArray () преобразование в php - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу привести Объект к массиву, чтобы я мог повторить цикл над ним.
Я знаю, что:

$array = (array) $object 

существует.Но я хочу что-то вроде пользовательского метода

__toString() 

для массивов.
Я знаю, что

__toArray()

не существует.
Вопрос:
Могу ли я создать этот волшебный метод и как?

Я хочу привести Объект к пользовательскому массиву:

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

не преобразовать его, вызвав функцию

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

, даже если это будет самый простой способ...

1 Ответ

0 голосов
/ 21 сентября 2018

Это довольно просто.Просто используйте 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;
}
...