1

私の問題を説明するためだけに、この小さなテストクラスを作成しました

大量のデータを扱うときは、通常、ArrayObject から継承するクラスを作成して、オブジェクトをより適切に構造化し、速度を上げます (php 5.3 ではヒステリックに高速です)。

通常の php ページでは問題なく動作しますが、Joomla 1.7 で使用すると、オブジェクトが変更されて返されます。

これがクラスです

// Call the class
new TestingArrayObject();

class TestingArrayObject extends ArrayObject {

    protected $Records;

    public function __construct() {
        $this->Records = 10;

        for ($index = 0; $index < $this->Records; $index++) {
            $this->append(new TestObject($index, $this->createRandomName()));
        }

        echo "<xmp>";
        print_r($this);
        echo "</xmp>";
    }

    private function createRandomName() {
        $chars = "abcdefghijkmnopqrstuvwxyz";
        srand((double) microtime() * 1000000);
        $i = 0; $pass = '';
        while ($i <= 7)
            $num = rand() % 33; $tmp = substr($chars, $num, 1); $pass = $pass . $tmp; $i++;

        return $pass;
    }

    public function append(TestObject $value) {
        parent::append($value);
    }

}

class TestObject {

    public $id;
    public $name;

    public function __construct($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }

}

通常のphpアプリケーションでは、戻ります

TestingArrayObject Object
(
    [Records] => 10
    [storage:ArrayObject:private] => Array
        (
            [0] => TestObject Object
                (
                    [id] => 0
                    [name] => yyhjn
                )

            [1] => TestObject Object
                (
                    [id] => 1
                    [name] => ausoan
                )
...

しかし、Joomlaではそれが返されます

TestingArrayObject Object
(
    [0] => TestObject Object
        (
            [id] => 0
            [name] => fwwuxg
        )

    [1] => TestObject Object
        (
            [id] => 1
            [name] => vevimvbk
        )
...

したがって、配列オブジェクト以外はすべてスキップされます。これは、ドキュメント (とにかくひどい) がこの動作をカバーしていないため、非常に面倒です。この設計パターンに依存するより大きなフレームワークを書いているので、すべてを再設計したくありません! :)

どこから始めればよいかアドバイスはありますか?

4

1 に答える 1

1

壊れているので、代わりにArrayObjectをプロパティとして実装する必要がありました

于 2011-11-29T12:26:33.277 に答える