#php #joomla1.7 #spl #arrayobject
#php #joomla1.7 #spl #arrayobject
Вопрос:
Я написал этот небольшой тестовый класс, чтобы проиллюстрировать свою проблему
При работе с большими объемами данных я обычно создаю класс, который наследуется от 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
)
...
Таким образом, он пропускает все, кроме объекта array, что очень раздражает, поскольку документация (которая в любом случае отстой) не описывает это поведение. Я пишу большие фреймворки, которые зависят от этого шаблона проектирования, поэтому я бы предпочел не переделывать все! 🙂
Любой совет, с чего начать?
Ответ №1:
Оно нарушено, вместо этого пришлось реализовать ArrayObject как свойство