php类和数组疯狂至少对我而言

时间:2012-07-18 20:52:56

标签: php wordpress

所以我现在有两件事情被困住了。第一

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();

5 个答案:

答案 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()是静态赋值(而不是函数调用),因此在类定义中允许它。