Наследование класса ArrayObject нарушено в Joomla 1.7? - PullRequest
1 голос
/ 23 октября 2011

Я написал этот небольшой тестовый класс, чтобы проиллюстрировать мою проблему

При работе с большими объемами данных я обычно создаю класс, который наследуется от 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
        )
...

Таким образом, он пропускает все, кроме объекта массива, что очень раздражает, поскольку документация (которая в любом случае отстой) не охватывает это поведение. Я пишу большие фреймворки, которые зависят от этого шаблона проектирования, поэтому я предпочел бы не перепроектировать все! :)

Какой совет, с чего начать?

1 Ответ

1 голос
/ 29 ноября 2011

Не работает, пришлось реализовать ArrayObject как свойство вместо

...