将类强制转换为数组时的数组键命名

Dan*_*iel 0 php

当我将一个类强制转换为数组时,键的名称将不同,具体取决于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);
Run Code Online (Sandbox Code Playgroud)

输出量

array(3) {
  ["Xa"]=>
  int(1)
  ["*b"]=>
  int(2)
  ["c"]=>
  int(3)
}
Run Code Online (Sandbox Code Playgroud)

Rak*_*har 5

请参考手册点击这里

如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的类名在变量名之前;受保护的变量在变量名前带有“ *”。这些前置值的任一侧都有空字节。这可能会导致一些意外的行为: