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

时间:2019-04-07 18:38:16

标签: 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);

输出

array(3) {
  ["Xa"]=>
  int(1)
  ["*b"]=>
  int(2)
  ["c"]=>
  int(3)
}

1 个答案:

答案 0 :(得分:5)

请参阅手册Click here

  

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