php中的一个对象数组

时间:2012-07-18 18:12:33

标签: 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();
?>

致命错误:无法在C:\ xampp \ htdocs \ wordpress \ wp-content \ plugins \ exec-php \ includes \ runtime.php(42)中使用DisplayTaxonomy类型的对象作为数组:eval()'d code on第9行

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

5 个答案:

答案 0 :(得分:3)

使用[]运算符将$x附加到$myarray

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

或者通过array_push(),作为一个函数调用,它的效率可能比使用[]语言结构的效率要低一些。

array_push($myarray, $x);

定义和添加数组的方法详见the PHP manual on Arrays

答案 1 :(得分:3)

$myarray = $x;

应该是

$myarray[] = $x

答案 2 :(得分:1)

  

从PHP 5.4开始,您还可以使用替换的短数组语法   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(); 
?> 

答案 3 :(得分:0)

在php中,数组追加是这样的:

$myarray[] = $x

您正在做的是将$myarray分配给DisplayTaxonomy对象,然后尝试将您的对象用作具有数组下标($myarray[0])的数组。因此错误。

顺便说一句,如果您要为属性使用getter和setter,则不应将该属性公开为public。尝试protected $ADTitle;或者不要使用getter和setter。

答案 4 :(得分:0)

原因是您在执行以下操作时将对象分配给$myarray$myarray = $x。此时,$myarray不再是数组,而是您分配给它的对象,即$x

在代码中的评论中,您说您还尝试了array_push($$x, $myarray)。这不起作用的原因有两个。

原因1:您使用$$x代替$x。如果您有两个美元符号($$x),则相当于${$x},它将首先将$x转换为字符串(可能是“对象#1”或类似的东西),然后查找名为${'Object #1'}的变量,它显然不存在。例如,如果您有一个名为$something的变量,您也可以像这样使用它:${'something'}。因此,如果您有一个包含文字字符串“something”的变量,例如$var_name = 'something';,那么您可以执行${$var_name}$$var_name。这两种情况都会得到变量$ something的内容。

原因2:您还在array_push中将它们排列错误。

这应该适用: array_push($myarray, $x)

但正如其他人所指出的,这恰恰相同:$myarray[] = $x

我希望这有助于解释事情是如何运作的。