1

我不明白为什么我会收到此错误!在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 类型的对象作为数组:第 9 行的 eval() 代码

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

5 回答 5

3

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

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

或者 via array_push(),作为函数调用,它的效率可能比使用[]lanugage 构造低一点。

array_push($myarray, $x);

定义和添加到数组的方法在PHP 的数组手册中有详细说明。

于 2012-07-18T18:14:25.357 回答
3
$myarray = $x;

应该

$myarray[] = $x
于 2012-07-18T18:14:32.397 回答
1

从 PHP 5.4 开始,您还可以使用短数组语法,它将 array() 替换为 []。

允许您初始化对象并将对象添加到数组中:

<?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(); 
?> 
于 2012-07-18T18:19:03.980 回答
0

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

$myarray[] = $x

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

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

于 2012-07-18T18:17:16.347 回答
0

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

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

原因 1:您使用$$x的是$x. 如果有$$x两个${$x}美元符号$x${'Object #1'}. 例如,如果您有一个名为 的变量$something,您也可以像这样使用它:${'something'}. 因此,如果您有一个包含文字字符串“某物”的变量,例如$var_name = 'something';,那么您可以执行${$var_name}$$var_name。这两种情况都会得到变量 $something 的内容。

原因 2:您还将它们以错误的顺序排列在array_push.

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

但正如其他人所指出的,这是完全等价的:$myarray[] = $x.

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

于 2012-07-18T18:23:43.930 回答