3

独自の型の配列を含むことができるPHPクラスがあります。このクラスにはhatch()、配列項目の1つに対して呼び出すと呼び出される関数もあり、関数を呼び出せないというメッセージが表示されます。私はそれをそのように呼びます

$this->arrayLikeThis[$i]->hatch();

ただし、オブジェクトをハッチングするための外部関数を作成しましたが、そのように呼び出すのが大好きです。var_dump()クラスのの任意の関数を呼び出すことができることを私は知っています:

object(web\ui\structure\tag)#1 (4) {
  ["name"]=>
  string(4) "meta"
  ["type"]=>
  int(1)
  ["attributes"]=>
  array(2) {
    [0]=>
    object(web\ui\structure\attribute)#2 (2) {
      ["attributeName"]=>
      string(7) "content"
      ["attributeValue"]=>
      string(24) "text/html; charset=utf-8"
    }
    [1]=>
    object(web\ui\structure\attribute)#3 (2) {
      ["attributeName"]=>
      string(10) "http-equiv"
      ["attributeValue"]=>
      string(12) "Content-Type"
    }
  }
  ["childNodes"]=>
  array(0) {
  }
}
4

2 に答える 2

1

実際のオブジェクトを指定するのではなく、オブジェクトの配列だけを指定します。

$this->arrayLikeThis[identifier]->hatch();

ここで、identifierは、配列が数値の場合は数値、または関数を呼び出すオブジェクトを含む要素の名前です。

この例を今すぐ取り上げて、次のことを示します。

<?php  
    class arby
    {
        public $myID=0;
        public $ray=array();

        public function insertNew()
        {
            $this->ray[0] = new arby();
        }

        public function updateMe()
        {
            $this->myID='1';
        }

        public function displayMe()
        {
            echo $this->myID."\n";
        }

    }

    $var= new arby();
    $var->displayMe();
    $var->insertNew();
    $var->ray[0]->updateMe();
    $var->ray[0]->displayMe();


?>  

出力:

0
1

これは、その中にそれ自体のインスタンスを持つことができるクラスをカバーし、これらを配列に追加し、それらの中から関数を呼び出し、オブジェクトの配列内の個々のオブジェクトを呼び出します。

編集:関数がオブジェクトhatch()内の関数であると仮定すると、これは機能するはずです:attribute

$varName->attributes[0]->hatch();

編集:私が作成した2番目のインスタンス内にさらにインスタンスがあったとするとarby、次のようにそれらから関数を呼び出すことができます。

$var->ray[0]->ray[1]->hatch();

これは、変数の配列要素にクラス$varの別のインスタンスがあり、そのインスタンスに別の配列があり、今回は要素のオブジェクトの関数を呼び出すことを前提としています。arby01

于 2012-09-04T08:16:32.437 に答える
1

Fluffehは正しいです。実際にクラスへの参照である場合、コードは正常に機能するはずです(これは非常に疑わしいです)。これは、クラスがどのように見えるかをシミュレートする例です(同じ関数を使用し、配列内にあります)。

<?php
    class egg {
        private $identifier;
        private $eggChildren = array();
        public function __construct($identifier) {
            $this->identifier = $identifier;
        }
        public function createEgg($identifier) {
            $this->eggChildren[$identifier] = new egg($this->identifier . " - " . $identifier);
        }
        public function hatch() {
            echo "Just hatched egg with ID " . $this->identifier . "<br />";
        }
        public function hatchAllChildren() {
            foreach ($this->eggChildren as $childID => $eggChild) {
                $eggChild->hatch();
            }
        }
    }
    class eggs {
        private $arrayLikeThis;
        const COUNT_EGGS = 3;
        const COUNT_EGG_CHILDREN = 3;
        public function createEggs() {
            $this->arrayLikeThis = array();
            for ($i = 0; $i < self::COUNT_EGGS; $i++) {
                $this->arrayLikeThis[$i] = new egg($i);
                for ($j = 0; $j < self::COUNT_EGG_CHILDREN; $j++) { 
                    $this->arrayLikeThis[$i]->createEgg($j);
                }
            }
        }
        public function hatchEggs() {
            for ($i = 0; $i < self::COUNT_EGGS; $i++) {
                $this->arrayLikeThis[$i]->hatchAllChildren();
                $this->arrayLikeThis[$i]->hatch();
            }
        }
    }

    $eggController = new eggs();
    $eggController->createEggs();
    $eggController->hatchEggs();
?>

そしてこれは出力します

Just hatched egg with ID 0 - 0
Just hatched egg with ID 0 - 1
Just hatched egg with ID 0 - 2
Just hatched egg with ID 0
Just hatched egg with ID 1 - 0
Just hatched egg with ID 1 - 1
Just hatched egg with ID 1 - 2
Just hatched egg with ID 1
Just hatched egg with ID 2 - 0
Just hatched egg with ID 2 - 1
Just hatched egg with ID 2 - 2
Just hatched egg with ID 2
于 2012-09-04T08:30:10.303 に答える