只是把它打出来$array = (array) $yourObject;如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名,但有几个值得注意的例外:整数属性不可访问;私有变量的类名与变量名相加;受保护的变量在变量名前面有一个“*”。这些预置值的两边都有空字节。
示例:简单对象$object = new StdClass;$object->foo = 1;$object->bar = 2;var_dump( (array) $object );
产出:array(2) {
'foo' => int(1)
'bar' => int(2)}
示例:复杂对象class Foo{
private $foo;
protected $bar;
public $baz;
public function __construct()
{
$this->foo = 1;
$this->bar = 2;
$this->baz = new StdClass;
}}var_dump( (array) new Foo );
输出(为清晰起见编辑了\s):array(3) {
'\0Foo\0foo' => int(1)
'\0*\0bar' => int(2)
'baz' => class stdClass#2 (0) {}}
输出带var_export而不是var_dump:array (
'' . "\0" . 'Foo' . "\0" . 'foo' => 1,
'' . "\0" . '*' . "\0" . 'bar' => 2,
'baz' =>
stdClass::__set_state(array(
)),)
以这种方式进行类型转换不会对象图进行深度转换,您需要应用空字节(如手册引号中所解释的)来访问任何非公共属性。因此,当转换StdClass对象或仅使用公共属性的对象时,这种方法效果最好。如果你想要的东西又快又脏的话,那就好了。
还可以看到这篇深入的博客文章: