2012-07-18 18 views
1

在php中的對象數組

我不明白爲什麼我得到這個錯誤!是如此簡單,但非常不同的PHP。

<?php 
    $x=new DisplayTaxonomy(); 
    $myarray= array(); 
    $x->setADTitle("bunkers"); 
    echo $x->getADTitle(); 

    $myarray =$x;//i also tried array_push($$x, $myarray); same error 
    echo $myarray[0]->getADTitle(); 
?> 

致命錯誤:無法使用類型DisplayTaxonomy的對象在C數組:\ XAMPP \ htdocs中\ WordPress的\可溼性粉劑內容\插件\ EXEC-PHP中\包括\ runtime.php(42):的eval( )「第9行

<?php 
class DisplayTaxonomy { 
    public $ADTitle; 
public function setADTitle($ADTitle) 
    { 
     $this->ADTitle = $ADTitle; 
    } 
    public function getADTitle() 
    { 
     return $this->ADTitle; 
    } 
?> 

回答

3
$myarray = $x; 

應該

$myarray[] = $x 
+0

我該如何初始化一個數組成爲某種類型的對象例如$ myarray [] = new DisplayTaxonomy(); // ????? – hidden 2012-07-18 20:03:28

+0

@jvelez PHP數組元素不必都是相同的類型。 '$ myarray = array(10,「foo」,new DisplayTaxonomy());'是完全合法的語句。 – 2012-07-18 20:19:55

3

使用[]操作者將追加$x d代碼到$myarray

$myarray[] = $x; 
echo $myarray[0]->getADTitle(); 

或經由array_push(),其作爲函數調用的效率可能比使用[] lanugage構造的效率低一點。

array_push($myarray, $x); 

用於定義和添加到數組的方法詳見the PHP manual on Arrays

0

在PHP中,數組追加是這樣的:

$myarray[] = $x 

你在做什麼是指派$myarrayDisplayTaxonomy對象,然後嘗試用你的對象作爲具有數組下標的數組($myarray[0])。因此錯誤。另外,如果您打算爲屬性使用getter和setter,則不應該將該屬性公開爲公有屬性。試試protected $ADTitle;或者不要使用getters和setter。

+0

我知道它是故障排除的一部分 – hidden 2012-07-18 20:42:19

1

As of PHP 5.4 you can also use the short array syntax, which replaces array() with [].

This允許您同時初始化和對象添加到一個數組:

<?php 
class DisplayTaxonomy 
{  
    public $ADTitle; 

    public function setADTitle($ADTitle) 
    {   
     $this->ADTitle = $ADTitle; 
    } 

    public function getADTitle() 
    { 
     return $this->ADTitle; 
    } 
} 

$x = new DisplayTaxonomy(); 
$x->setADTitle("bunkers"); 
//echo $x->getADTitle(); 

$myarray[] = $x; // Notice no previous array initialization 
echo $myarray[0]->getADTitle(); 
?> 
0

的原因是因爲你當你分配對象$myarray$myarray = $x。此時,$myarray不再是一個數組,而是您分配給它的對象,即$x

在代碼中的評論中,你說你也試過array_push($$x, $myarray)。這不起作用的原因有兩個原因。

原因1:您正在使用$$x而不是$x。如果您有兩個美元符號($$x),它相當於${$x},它將首先將$x轉換爲一個字符串(可能是「Object#1」或類似的東西),然後查找名爲${'Object #1'}的變量,這明顯不存在。例如,如果您有一個名爲$something的變量,那麼您也可以像這樣使用它:${'something'}。因此,如果您有一個包含字符串「something」的變量,例如$var_name = 'something';,那麼您可以執行${$var_name}$$var_name。這兩種情況都會得到變量$ something的內容。

原因2:您還在array_push中將它們按錯誤順序排列。

這應該工作,而不是: array_push($myarray, $x)

但正如其他人指出,這是完全等效:$myarray[] = $x

我希望能幫助解釋事情是如何工作的。