【问题标题】:Php object not converting to array [duplicate]PHP对象未转换为数组[重复]
【发布时间】:2016-10-11 01:28:06
【问题描述】:

实际上我无法将 php 对象转换为数组,特别是当我有其他访问说明符时。 例如:

<?php

class Foo
{
    public $bar = 'barValue';
    protected $baz = 'bazValue';
    private $tab = 'tabValue';
}

$foo = new Foo();

$arrayFoo = (array) $foo;

echo "<pre>";
var_dump($arrayFoo);

输出是:

array(3) {
  ["bar"]=>
  string(8) "barValue"
  ["*baz"]=>
  string(8) "bazValue"
  ["Footab"]=>
  string(8) "tabValue"
}

所以我无法获取带有名称的密钥,它会自动添加 *(用于受保护)和类名(用于私有),

【问题讨论】:

  • 因为你已经定义了变量 protected 和 private 这就是为什么它给出 * ,脚在数组索引中......
  • 这是一个特性,而不是一个错误

标签: php arrays object


【解决方案1】:

get_object_vars PHP documentation 可以使用 cmets 中提到的函数:

function obj2array ( &$Instance ) {
    $clone = (array) $Instance;
    $rtn = array ();
    $rtn['___SOURCE_KEYS_'] = $clone;

    while ( list ($key, $value) = each ($clone) ) {
        $aux = explode ("\0", $key);
        $newkey = $aux[count($aux)-1];
        $rtn[$newkey] = &$rtn['___SOURCE_KEYS_'][$key];
    }

    return $rtn;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    相关资源
    最近更新 更多