1

ですから、私が今立ち往生していることが2つあります。初め

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


}

2番!このような関数で:

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


}

次の//[]を使用してC:\ xampp \ htdocs \ wordpress \ wp-// content \ themes \ twintyeleven \ 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

Taxonomyオブジェクトのコレクションを処理するクラスを作成したいようです。その場合、クラスにそれ自体のインスタンスを格納するのではなく、2つのクラスが必要です。

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の事前定義されたインターフェースの1つを使用することを検討する価値があるかもしれません。

于 2012-07-18T21:19:34.830 に答える
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 に答える
2

あなたはこれを行うことはできません:

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

無限ループのようなものだからです:)したがって、__ contruct()関数を使用する必要があります。

変更後:

return $MyArray[];

に :

return $MyArray;
于 2012-07-18T20:58:12.123 に答える
0

クラスプロパティを定義するときにコード(new DisplayTaxonomy())を呼び出すことはできません。クラスのコンストラクターで値を割り当てる必要があります。

class Foo
{
    public $MyArray;

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

もう1つの問題は、$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()は静的な割り当て(関数呼び出しではない)であるため、クラス定義で許可されています。

于 2012-07-18T20:56:44.387 に答える