2013-10-27 72 views

回答

1

有沒有__toArray魔法(只是check the ones that exist here),但不應該是,國際海事組織。
雖然人們要求一種神奇的方法,但看起來這種方法不會很快實施。

考慮是什麼對象的,以及我們如何使用它,一個toInt方法就沒有太大的意義,因爲所有的對象可以是澆鑄到一個數組,並且可以重複過去,我很少看到點無論如何,在使用__toArray。在對象
「轉換」到一個數組,你可以使用以下任何一種方法:

$obj = new stdClass; 
$obj->foo = 'bar'; 
var_dump((array) $obj); 
//or 
var_dump(json_decode(json_encode($obj), true)); 

這可以與兩個自定義對象來完成,如stdClass實例的一致好評。
只要將它們作爲數組訪問,我就看不到這一點。爲什麼要寫一個緩慢魔術方法,能夠做一些事情,如:

$bar = 'foo'; 
$obj[$bar]; 

如果你能做到:

$obj->{$bar} 

,或者如果你可以這樣做:

foreach($obj as $property => $value){} 

或者,如果您需要更具體的東西,只需實現任何Traversable接口。
對於那些罕見的情況,您希望某個對象以特定的方式從特定屬性中生成數組,只需爲其編寫一個方法並明確調用該方法即可。

class ComplexObject 
{ 
    private $secret = null; 
    private $childObject = null; 
    public $foo = null; 
    //some methods, then: 
    public function toArray() 
    {//custom array representation of object 
     $data = array(); 
     foreach($this->childObject as $property => $val) 
     { 
      if (!is_object($this->childObject->{$property})) 
      { 
       $data[$property] = $val; 
      } 
     } 
     $data['foo'] = $this->foo; 
     return $data; 
    } 
    //and even: 
    public function toJson() 
    { 
     return json_encode($this->toArray()); 
    } 
} 

好的,你必須明確地自己調用這些方法,但這並不難,真的......是嗎?

+0

需要在'$ data [property'因爲它缺少一個 - '以防某人按照這個例子學習:)' – aequalsb

相關問題