Тема для никого - 1.10.7 и PHP 5.2.12 (часть 1)

Сложность программы растёт до тех пор,
пока не превысит способности программиста
(Законы Мерфи для программистов)

Недавно ставил себе на локалку 1.10.7 и столкнулся с ошибками во время установки, о чём создал тему на форуме, где мне объяснили, что у меня наверняка установлена древняя версия PHP, а для Instant 1.10.7 требуется PHP от 5.3 до 7.0
Проверил. Действительно, с внезапамятных времён установлена сборка Денвера с PHP 5.2.12
Поставил Open Server — всё заработало. Даже не смотря на то, что там по умолчанию используется PHP 7.1

На этом можно было бы и закончить, но неугомонное любопытство заколебало вопросом: "Что там такое удивительное в PHP 5.3, чего нельзя было сделать с помощью PHP 5.2 12". Полез искать...

Первая проблема возникает при инсталляции сайта. Сразу:

Parse error: syntax error, unexpected T_STATIC in \core\classes\db.class.php on line 39

В указанном месте файла db.class.php строка:

$this->db_link = static::initConnection();

При создании класса cmsDatabase выполняется подключение базы данных.
В более ранних версиях instant это делалось непосредственно в private function __construct() :
$this->db_link = mysql_connect($inConf->db_host, $inConf->db_user, $inConf->db_pass) or die('Cannot connect to MySQL server');
Теперь для этого существует отдельная функция initConnection(), обращение к которой и вызывает ошибку.
Дело в том, что в PHP 5.3 был реализован механизм "позднего статического связывания" или LSB (Late Static Binding), который позволяет при вызове из одного класса, функции, расположенной в другом классе, установить связь с классом, из которого происходит вызов, а не с тем, где расположена функция!
Начитавшись про это здесь, я понял, что мне никогда не приходилось решать задачи хоть сколько-нибудь повышенной сложности, так как я даже придумать не могу ситуацию, в которой невозможно обойтись без "позднего связывания"!
А вот решение как обойти возникающую ошибку нашлось сразу:

$this->db_link = self::initConnection();

Инсталляция проходит без ошибок.

Осталось не приятное ощущение — не понятно для чего это было сделано? Что поменялось?

to be continue...
0
Реклама Реклама #
0
SpideR SpideR 1 год назад #
И зачем это сообщество? Мир уже использует PHP 7.x.x, а вы с 5.2. facepalm
0
talerbiz talerbiz 1 год назад #
Вам нужно создать свою SHTIRLICCMS
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.