function __construct()
{
die('Virtual Class -- cannot instantiate');
}
Соответственно если закомментировать эту строчку, то phpPgAdmin работает нормально, соединение с БД проходит успешно.
Может я чего не понимаю, но какого в конструкторе класса сделали вызов функции die()?
Последний раз редактировалось ormorph 08.03.2021 09:03, всего редактировалось 1 раз.
Может я чего не понимаю, но какого в конструкторе класса сделали вызов функции die()?
Раз это "виртуальный" класс, видимо, его конструктор не должен вызываться. Должен вызываться конструктор наследующего класса. (PHP не знаю и не особо хочу.)
Удалить то не сложно и даже работать будет. Но, замысел, видимо, был другим, раз автор сделал тот класс виртуальным.
Кстати, то самое "die" часто используется в JAVA-классах. Цель та же самая - правильное наследование.
Мудрость приходит с возрастом.
Иногда возраст приходит один. Эхо разума
Раз это "виртуальный" класс, видимо, его конструктор не должен вызываться.
Ну да, посмотрел класс ADOConnection наследует класс ADODB_postgres64, а там используется устаревшее название конструктора, добавил в него новый вариант:
И все заработало.
Тогда понимаю, почему не принят PR #118, там автор удалил эти строчки, что скорее всего не очень то хорошо. Видно переход на php8 несколько болезненный. Хотя php7 все время должен был ругаться на устаревшее название конструктора.
При смене версии php меняется синтаксис конструкторов? Как часто такие перемены?
Время от времени происходят, например при переходе с php5 изменился драйвер доступа к mysql. Это не относится к синтаксису конструкторов. В данном случае изменилось название конструктора класса, ранее оно совпадало с названием класса, теперь это зарезервированное имя, возможно это сделано для ускорения работы php. Но php7 уже использовал новое название конструктора и при наличии старого выбирал вариант нового. В php8 старый вариант конструктора был полностью удалён.
Пересмотрел, а не тут то было, это ещё не все недочёты. Для нормальной работы под php8 понадобилось ещё изменить строчку. Базы данных редактировались, но не создавались. Теперь вроде как все работает.
Патч изменений:
Spoiler