Обратная совместимость PHP

12
Brand from Amber
На сайте с 18.08.2007
Offline
291
480
Всем доброго времени суток. Есть у меня интерес  запустить скрипт написанный под PHP 5.2 на 7 версии.  Но проблема в том, что в PHP я не силён - потихоньку ковыряюсь исправляю ошибки ... и вот столкнулся с тем, что интерпретатор не понимает когда свойству объекта передают ссылку на переменную. То есть:
        public function newPage($url,$template)
        {
                $this->prepareNewPath(&$url);
        }

Возвращает ошибку:  PHP Parse error:  syntax error, unexpected '&' in (в строке между фигурных скобок).

Может кто-нибудь подскажет, в каком направлении копать, чтобы вылечить эти ошибки не сильно меняя логику работы скрипта?

Заранее спасибо.

Лучший способ понять что-то самому - объяснить это другому.
Aisamiery
На сайте с 12.04.2015
Offline
293
#1
Brand from Amber :

Может кто-нибудь подскажет, в каком направлении копать, чтобы вылечить эти ошибки не сильно меняя логику работы скрипта?

Заранее спасибо.


Не передавать по ссылке а вернуть результат

public function prepareNewPath($url) 
{
    // this is your code ...
    return $url;
}

// call
public function newPage($url, $template)
{
    $url = $this->prepareNewPath($url);
}
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
Brand from Amber
На сайте с 18.08.2007
Offline
291
#2
Aisamiery #:

Не передавать по ссылке а вернуть результат

Поправил. А как быть с конструкциями вида

Page::initModule($mod, &$page);

Ругается, что: PHP Parse error:  syntax error, unexpected '&', expecting ')' - т.е. скобка ещё добавилась.

Если интересно, то ИнитМодуль такой

        public static function initModule($includestr,Page &$page)
        {
             ...

        }
W1
На сайте с 22.01.2021
Offline
285
#3
Brand from Amber :
в каком направлении копать, чтобы вылечить эти ошибки не сильно меняя логику работы скрипта?

В том месте, где определяется метод prepareNewPath(), добавить амперсанд перед параметром, что-то вроде

public function prepareNewPath(&$url) 
{
...
}

А в вызове метода амперсанд убрать

        public function newPage($url,$template)
        {
                $this->prepareNewPath($url);
        }
Мой форум - https://webinfo.guru –Там я всегда на связи
Brand from Amber
На сайте с 18.08.2007
Offline
291
#4
webinfo #:
В том месте, где определяется метод prepareNewPath(), добавить амперсанд перед параметром

Он там стоял:

        private function prepareNewPath(&$url)
        {

Получается, что если при определении метода амперсанд стоит, то при вызове, его указывать не обязательно? т.е. в случае с Page::initModule($mod, &$page); достаточно его просто удалить?

W1
На сайте с 22.01.2021
Offline
285
#5
Brand from Amber #:
Он там стоял

Значит, просто убрать при вызове.

W1
На сайте с 22.01.2021
Offline
285
#6
Brand from Amber #:
А как быть с конструкциями вида

Та же хрень.

Brand from Amber
На сайте с 18.08.2007
Offline
291
#7
webinfo #:
Та же хрень.

Ок, сейчас попробую.

W1
На сайте с 22.01.2021
Offline
285
#8
Brand from Amber #:
Получается, что если при определении метода амперсанд стоит, то при вызове, его указывать не обязательно? т.е. в случае с Page::initModule($mod, &$page); достаточно его просто удалить?

Да, и не только необязательно, а вообще нельзя с версии PHP 5.4.

Brand from Amber
На сайте с 18.08.2007
Offline
291
#9
Вроде заработало. Всем спасибо. Если что-то ещё всплывёт - я вернусь, уж не серчайте. 😊
AlexBatorsky
На сайте с 18.12.2020
Offline
7
#10

Чтобы не создавать новую тему, спрошу в этой )
Проблема та же, PHP 5.5 есть желание перейти на 7 и выше, но в PHP я не силен. Если сам начну колбасить, то замучаю тут вопросами

Хотелось бы найти исполнителя, кто возьмется за вменяемые деньги
Надеюсь, что ничего не нарушил этим сообщением )

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий