所以我现在有两件事情被困住了。第一
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[];
}
我得到以下内容 //不能在第52行的C:\ xampp \ htdocs \ wordpress \ wp - // content \ themes \ twentyeleven \ page.php中使用[]进行阅读 然后在客户端
$y=new DisplayTaxonomy();
$myArray[]=new DisplayTaxonomy();//works fine dont know why I cant do this in theclass.
$myArray[]=$y->getArrayOfDisplayTaxonomyObjects();
echo $myArray[0]->getADTitle();
答案 0 :(得分:3)
您似乎想要创建一个处理Taxonomy对象集合的类。在这种情况下,您应该有两个类,而不是使类本身存储实例。
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);
在下一个级别,可能值得考虑使用PHP's predefined interfaces之一来容纳Container类。
答案 1 :(得分: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
答案 2 :(得分:2)
在函数体中声明对象并在构造函数(或成员函数)中启动它们。在返回数组时,您不会使用[]
,$array[]
具有与array_push
相同的功能,仅此而已。
澄清,
class myClass {
public $obj = array();
public function __construct() {
$this->obj[] = new OtherObject();
}
public function getObj() {
return $this->obj;
}
}
答案 3 :(得分:2)
你不能这样做:
class DisplayTaxonomy {
public $MyArray[]= new DisplayTaxonomy();
}
因为它就像一个无限循环:)所以你必须使用__contruct()函数。
更改后:
return $MyArray[];
到:
return $MyArray;
答案 4 :(得分:0)
在定义类属性时,不能调用代码(new DisplayTaxonomy())。您必须在类的构造函数中分配值:
class Foo
{
public $MyArray;
public function __construct()
{
$this->MyArray = new DisplayTaxonomy();
}
}
另一个问题是$ array []快捷方式用于附加到数组。如果你只想返回数组(而不是写到你用[]询问的数组),只需跳过[]:
return $MyArray;
展开:
正如VincentJoigƞie在下面指出的那样;您正在尝试创建一个与您正在创建的类同名的类。除静态属性外,这没有任何意义。在这种情况下,你不能使用__construct(),而是宁愿在你第一次调用的静态方法中创建/设置对象:
static public function getInstance()
{
if (self::$MyArray === null)
{
self::$MyArray = new DisplayTaxonomy();
}
return self::$MyArray;
}
然而,这可能不是你想要的,似乎你在你的类定义中混淆了你的逻辑。你可能只想要自由猜测:
class Foo
{
public $MyArray = array();
}
由于array()是静态赋值(而不是函数调用),因此在类定义中允许它。