我从PHP手册中读到了这个:
如果将对象转换为数组,则结果是一个数组,其元素是对象的属性.键是成员变量名,有一些值得注意的例外:整数属性是不可访问的 ; 私有变量的类名前置于变量名; 受保护的变量在变量名前面加上'*'.这些前置值在任一侧都有空字节. 这可能会导致一些意外行为:
Run Code Online (Sandbox Code Playgroud)class A { private $A; // This will become '\0A\0A' } class B extends A { private $A; // This will become '\0B\0A' public $AA; // This will become 'AA' } var_dump((array) new B());上面看起来有两个名为'AA'的键,虽然其中一个 实际命名为'\ 0A\0A'.
我不太明白与像字样那些部分的含义此.
什么是整数属性?
"这些前置值在两侧都有空字节.这可能会导致一些意外行为"的含义是什么?
"上面的内容似乎有两个名为'AA'的键,虽然其中一个实际命名为'\ 0A\0A'"
通过使用此代码,您可以深入了解新的数组键。
$x = (array)new B();
foreach ($x as $key => $value) {
echo bin2hex($key), ' = ', $value, PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
它显示了键值的十六进制表示,从中您可以更清楚地看到发生了什么:
00420041 =
4141 =
00410041 =
Run Code Online (Sandbox Code Playgroud)
第一个属性 () 的数组键B::A被编码为"\x00B\x00A"ie chr(0) . 'B' . chr(0) . 'A',因为它的可见性是 私有的B。
第二个属性 ( B::AA) 被编码为 simple 'AA',因为它的可见性是公共的。
第三个属性 ( A::A) 与第一个属性非常相似,被编码为"\x00A\x00A",因为它的可见性是 私有的A。
我不完全确定整数属性是什么。我不会担心数字属性,因为它们的使用可以忽略不计并且不鼓励(这可能就是为什么没有太多提及这个“功能”。