1

所以我现在坚持两件事。第一的

class DisplayTaxonomy {
public $MyArray[]= new DisplayTaxonomy();  //the compiler says syntax error
//things I have tried 
//public $ss[]= new Object();  


}

第二!在这样的函数中:

public function whatever()
{
     $Temp = new DisplayTaxonomy();
     $Temp->setADTitle("1");
     $MyArray[]= $Temp;//works just fine.
     //then i tried to return the array 
      return $MyArray[];


}

我得到以下 //Cannot use [] for reading in C:\xampp\htdocs\wordpress\wp-//content\themes\twentyeleven\page.php 在第 52 行然后在客户端

$y=new DisplayTaxonomy();
$myArray[]=new DisplayTaxonomy();//works fine dont know why I cant do this in theclass.
$myArray[]=$y->getArrayOfDisplayTaxonomyObjects();
echo $myArray[0]->getADTitle();
4

5 回答 5

4

您似乎想创建一个处理分类对象集合的类。在这种情况下,您应该有两个类,而不是自己创建一个类存储实例。

class TaxonomyContainer 
{
    private $collection = array();

    public function addElement(DisplayTaxonomy $element)
    {
        $this->collection[] = $element;
    }

    public function getElements()
    {
        return $this->collection;
    }
}

class DisplayTaxonomy
{
    private $adTitle;

    public function setAdTitle($adTitle)
    {
        $this->adTitle = $adTitle;
    }

    //and other functionality the Taxonomy object should have
}

然后,您可以避免丑陋的自我复制行为并分离您的关注点。

$container = new TaxonomyContainer();
$element = new DisplayTaxonomy();
$container->addElement($element);

在下一个级别,可能值得考虑为 Container 类使用PHP 的预定义接口之一。

于 2012-07-18T21:19:34.830 回答
2

你不能做这个 :

class DisplayTaxonomy {
    public $MyArray[]= new DisplayTaxonomy();
}

因为它就像一个无限循环:) 所以你必须使用 __contruct() 函数。

更改后:

return $MyArray[];

至 :

return $MyArray;
于 2012-07-18T20:58:12.123 回答
2

您的第一个问题是由于尝试调用您要声明的类。

class DisplayTaxonomy { 
    public $MyArray[]= new DisplayTaxonomy(); 

您应该在您需要引用该类的代码部分中,在该类之外初始化您的对象。

此外,该对象已经是一个数组,因此您可以省略附加[]到末尾return $MyArray

public function whatever(){         
    $Temp = new DisplayTaxonomy();
    $Temp->setADTitle("1");

    $MyArray[] = $Temp;

    return $MyArray;
}

您在此处声明数组对象:

$MyArray[]= $Temp;//works just fine
于 2012-07-18T20:54:10.103 回答
2

您在函数体中声明对象并在构造函数(或成员函数)中启动它们。[]返回数组时不要使用,$array[]与 具有相同的功能array_push,仅此而已。

澄清,

class myClass {

    public $obj = array();

    public function __construct() {
       $this->obj[] = new OtherObject();
    }

    public function getObj() {
       return $this->obj;
    }
}
于 2012-07-18T20:54:46.153 回答
0

定义类属性时不能调用代码 (new DisplayTaxonomy())。您必须在类的构造函数中分配值:

class Foo
{
    public $MyArray;

    public function __construct()
    {
        $this->MyArray = new DisplayTaxonomy();
    }
}

另一个问题是 $array[] 快捷方式用于附加到数组。如果您只想返回数组(而不是写入您使用 [] 询问的数组),只需跳过 []:

return $MyArray;

扩展:

正如 Vincent Joigƞie 在下面指出的那样;您正在尝试创建一个与您已经创建的类同名的类。这没有任何意义,除了静态属性。在这种情况下,您不能使用 __construct(),而是宁愿在您第一次调用以检索对象的静态方法中创建/设置对象:

static public function getInstance()
{
    if (self::$MyArray === null)
    {
        self::$MyArray = new DisplayTaxonomy();
    }

    return self::$MyArray;
}

然而,这可能不是您想要的,而且您似乎在类定义中的逻辑中混淆了某些东西。自由猜测你可能只想:

class Foo
{
    public $MyArray = array();
}

由于 array() 是静态赋值(而不是函数调用),因此在类定义中是允许的。

于 2012-07-18T20:56:44.387 回答