class page {
...
function refresh() {
$items = array();
$contents = file_get_contents("{$_SERVER["DOCUMENT_ROOT"]}/_data/page.dat");
$scollection = explode("<ib>", $contents);
foreach ($scollection as $value) {
if ($value != "") {
$aitem = explode("<pb>", $value);
$item = new page();
$item->load_from_row($aitem);
$items[count($items)] = $item;
}
}
usort($items, array("page", "compare"));
$this->build_child_nodes($items); //не работает здесь!!!
unset($items);
}
function build_child_nodes($items) {
foreach ($items as $item) {
if ($item->parent_id == $this->id) {
$child = new page();
$child->assign($item);
$this->items[count($this->items)] = $child;
$child->parent = $this;
$child->build_child_nodes($items);
}
}
}
...
}
Работа с объектами php4/php5
У меня есть код, который работает в php5, но не работает в php4.
Подскажите в чем особенность php4 и как сделать, чтоб все заработало?
Код:
Код:
$contents = file_get_contents("{$_SERVER["DOCUMENT_ROOT"]}/_data/page.dat");
Такое вообще должно вызвать синтаксическую ошибку, у вас наверно не стоит вывод ошибок.
Разницу между PHP4 и PHP5 можно почитать в сети. В основном - это введение private/public/protected, переименование конструкторов и деструкторов, отражения и прочее. Так что ваш класс надо целиком показывать, а не лишь 2 метода.
p.s. почему это должно вызывать синтаксическую ошибку?
$child->build_child_nodes(&$items);
При этом может (не всегда) выскочить Notice (не помню какой), чтобы найти как исправить - можно поискать в сети.
По крайней мере, когда года 1.5 назад программировал объекты на пхп4 - все работало норм.
И ещё меня удивляет одно, вот вы написали в коде "//не работает здесь!!!". А че не работает? Я знаю что ли? У вас ошибка вываливается? Или функция не вызывается? Или получаете не то что надо?
Посчет $_SERVER["DOCUMENT_ROOT"] - перепроверил - не вызывает ошибки. Ну лан, не думал, что PHP в таком варианте это отрабатывает, но все равно никогда бы не использовал в таком контексте одни и те же кавычки.
В РНР4 при $obj2 = $obj1 создается новый екземпляр, а поля копируются. Думаю то же произойдет при передаче объекта как параметра.
Как уже сказал UAS может помочь &. Но если я правильно помню, его гадо дописать в обявлении функции/метода. Роботать оно будет, но некоторие отличия всеже останутся. А вообще мое ИМХО переносимость с РНР4 на РНР5 и обратно - дело неблагодарное.