Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с объектами php4/php5

339
11 августа 2009 года
verybadbug
619 / / 12.09.2005
Всем привет!
У меня есть код, который работает в php5, но не работает в php4.
Подскажите в чем особенность php4 и как сделать, чтоб все заработало?
Код:
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);
      }
    }
  }
...
}
244
11 августа 2009 года
UAS
2.0K / / 19.07.2006
 
Код:
$contents = file_get_contents("{$_SERVER["DOCUMENT_ROOT"]}/_data/page.dat");

Такое вообще должно вызвать синтаксическую ошибку, у вас наверно не стоит вывод ошибок.

Разницу между PHP4 и PHP5 можно почитать в сети. В основном - это введение private/public/protected, переименование конструкторов и деструкторов, отражения и прочее. Так что ваш класс надо целиком показывать, а не лишь 2 метода.
339
12 августа 2009 года
verybadbug
619 / / 12.09.2005
меня на самом деле интересует передача параметром функции объекта/указателя на объект... я так думаю, что из-за этого глюк... если кто программировал объекты на php4 - поделитесь синтаксисом....

p.s. почему это должно вызывать синтаксическую ошибку?
244
12 августа 2009 года
UAS
2.0K / / 19.07.2006
Ну передавайте объект как параметр, в этом ничего такого нет. Если надо передать как указатель, то пишитеть перед параметром &. Т.е. будет типа:
$child->build_child_nodes(&$items);
При этом может (не всегда) выскочить Notice (не помню какой), чтобы найти как исправить - можно поискать в сети.
По крайней мере, когда года 1.5 назад программировал объекты на пхп4 - все работало норм.

И ещё меня удивляет одно, вот вы написали в коде "//не работает здесь!!!". А че не работает? Я знаю что ли? У вас ошибка вываливается? Или функция не вызывается? Или получаете не то что надо?

Посчет $_SERVER["DOCUMENT_ROOT"] - перепроверил - не вызывает ошибки. Ну лан, не думал, что PHP в таком варианте это отрабатывает, но все равно никогда бы не использовал в таком контексте одни и те же кавычки.
276
12 августа 2009 года
Rebbit
1.1K / / 01.08.2005
В РНР5 все как у людей, Тоесть как в С#, Java и т.п.
В РНР4 при $obj2 = $obj1 создается новый екземпляр, а поля копируются. Думаю то же произойдет при передаче объекта как параметра.

Как уже сказал UAS может помочь &. Но если я правильно помню, его гадо дописать в обявлении функции/метода. Роботать оно будет, но некоторие отличия всеже останутся. А вообще мое ИМХО переносимость с РНР4 на РНР5 и обратно - дело неблагодарное.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог