Почему так странно конвертируется объект в массив?

Есть объект класса File:

<?php
declare(strict_types = 1);
namespace asoft\plain;

class File extends PlainElement
{
    protected $href;
    protected $title;
    protected $size;

    protected function getPropChecks()
    {
        $checks = [
            'href' => array(['is_string', true]),
            'title' => array(['is_string', true]),
            'size' => array(['is_int', true])
        ];

        return parent::getPropChecks() + $checks;
    }

}


Класс использует защищенные свойства и доступ к ним через магические методы (с проверкой типа).

Понадобилось конвертировать такой объект в массив. Вместо индексов ['href'], ['title'] и т. д. получилась какая-то белиберда (var_export результата приведения с помощью (array)):

array (
  '' . "\0" . '*' . "\0" . 'href' => 'teh_karta_610h400h340.pdf',
  '' . "\0" . '*' . "\0" . 'title' => 'File 1 descr',
  '' . "\0" . '*' . "\0" . 'size' => 1392034,
  '' . "\0" . '*' . "\0" . 'number' => 1,
)


Что это за ересь и как сделать конверсию в нормальный ассоциативный массив?
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Потому что при тупой конвертации в массив именно так кодируются protected свойства. Для private ещё пишется имя класса.
Собственно, мануал об этом открыто говорит в разделе Converting to array: php.net/manual/en/language.types.array.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы