2016-06-10 2 views
2

사실 저는 다른 접근 지시자가있을 때 php 객체를 배열로 변환 할 수 없습니다. 예를 들어 :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" 
} 

그래서 내가 그 이름을 가진 키를 얻을 수 아니에요, * 추가가 자동 (보호에 대한) 및 클래스 이름 (개인의 경우) ,

+0

당신이 버지니아를 정의 가지고 riables 보호 및 개인 thats 이유는 그주는 *, 배열 인덱스에서 도보 ... –

+3

그것은 기능이 아닌 버그 – Joshua

답변

3

당신은 get_object_vars PHP documentation에 대한 의견에 언급 된 기능을 사용할 수 있습니다 :

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; 
} 
관련 문제