当我将一个类强制转换为数组时,键的名称会有所不同,具体取决于class属性具有的访问器。
公共属性始终与属性名称具有相同的键,但是私有属性以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)
}
答案 0 :(得分:5)
请参阅手册Click here
如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的类名在变量名之前;受保护的变量在变量名前带有“ *”。这些前置值的任一侧都有空字节。这可能会导致某些意外行为: