Когда я привожу класс к массиву, ключи называются по-разному в зависимости от того, какой метод доступа имеет свойство класса.
Публичные свойства всегда имеют тот же ключ, что и имя свойства, но частные свойства начинаются с X
, а защищенные свойства — с *
.
Я искал ссылку в документации PHP на это поведение, но не нашел. Я воспроизвел это как в PHP 5.6, так и в 7.1.
Почему это происходит? Это где-то задокументировано?
<?php
class X {
private $a = 1;
protected $b = 2;
public $c = 3;
}
$class = new X();
var_dump((array) $class);
array(3) {
["Xa"]=>
int(1)
["*b"]=>
int(2)
["c"]=>
int(3)
}
Пожалуйста, обратитесь к руководству кликните сюда
If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side. This can result in some unexpected behaviour: