2013-04-24 54 views
2

我正在嘗試使用OOP和PHP。如何訪問無鍵陣列的內容到對象轉換?

我不知道爲什麼我會需要做這樣的事情,但我想知道它將如何完成,無法在網上找到它。

class Example{ 

public $a = 'aye'; 
public $b = 'bee'; 
public $c = 'see'; 

public function how(){ 
    return (object)array(
         $this->a, 
         $this->b, 
         $this->c 
         ); 
    }  
} 

$example = new Example; 
$how = $example->how(); 
echo $how->1; //I thought would print bee 

我知道,給數組鍵願意讓我做

echo $how->beekey //which would give me beekey's value 

回答

2

這基本上是不可能的,因爲在這個bug report解釋;數字對象屬性是PHP中的一個灰色區域。

但是,你可以投對象返回到一個數組和參考價值:

$arr = (array)$how; 
echo $arr[1]; 

或者,作爲一個班輪:

echo current(array_slice((array)$how, 1, 1)); 

最好的建議我可以給你是不是把它變成一個物體擺在首位:

public function how() 
{ 
    return array(
     $this->a, 
     $this->b, 
     $this->c 
    ); 
}  

然後就是其引用爲$how[1]

順便說一句,$how->{1}used to work在PHP 4 :)

+0

感謝您的迴應。在OOP中返回數組是否是常見做法? – chris 2013-04-24 06:55:43

+0

@chris唔,不;但爲了做「OO」而將數組轉換爲匿名對象通常不會完成。不過你可以使用['ArrayObject'](http://php.net/arrayobject)。 – 2013-04-24 07:04:02

0

有關使用一個循環是什麼?

foreach($how as $value) 
{ 
    echo $value .'<br>'; //this print your values: aye<br>bee<br>see 
} 
+0

你並不需要爲'foreach'循環計數器。只需回顯'$價值'。 – Pankucins 2013-04-24 06:23:24

+0

@Pankucins這是正確的,謝謝 – Fabio 2013-04-24 06:24:23

+1

你的循環中仍然有'$ i ++'。雖然這種方法可行,但它不會讓開發人員直接訪問元素。我認爲$ how - > {1}可能會挽救一天,但不幸的是它會返回空值。 – Pankucins 2013-04-24 06:27:03