Переход на PHP 7

Решил написать о переходе на PHP 7, так как сам сейчас занять переводом кода одного движка по PHP 7. И так для начала включаем дебаг или отладчик в админ панели сайта, если такого нет у вас, то можно сделать так, как написано в теме: Поиск ошибок в PHP, теперь на экране монитора, мы можем видеть сообщения ошибках, например, такое:
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead - dir/file.php (номер строки)

Это сообщение говорит о том, что модификатор e не существует в PHP 7, следует избавляться от него, но если просто удалить данный модификатор, сценарий может выполнятся неправильно, непросто же так его туда писали. Я покажу на примере кода из PHPFOX 3 (как я переписывал код: PHPFOX 3 переход на PHP 7), делаем так:
Например, у нас сообщение ошибки указывает на такую строчку:
        $sStr = preg_replace('/\[x=(\d+)\].+?\[\/x\]/ise', "''.stripslashes(\$this->_parseUserTagged('$1')).''", $sStr); 

Её следует изменить так:
        $sStr = preg_replace_callback(
            '/\[x=(\d+)\].+?\[\/x\]/is',
            function($match)
            {
                return stripslashes($this->_parseUserTagged($match[1]));
            },
        $sStr); 

Тут мы заменили функцию preg_replace(), на preg_replace_callback(), удалили модификатор e в первом аргументе, которым является регулярное выражение. Второй аргумент заменили анонимной функцией, которая будет выполнятся после применения регулярного выражения. Анонимная функция содержит массив $match, элементы массива заменяют совпадения, например, было: $1, стало: $match[1]; было: $2, стало: $match[2], и так далее. Убрали кавычки и символ экранирования (обратный слеш \).

В завершении об ошибки несуществующего модификатора e, покажу ещё пару примеров замены кода. Строку:
$aRow['value_actual'] = preg_replace("/s:(.*):\"(.*?)\";/ies", "'s:'.strlen('$2').':\"$2\";'", $aRow['value_actual']); 

Меняем так:
                            $aRow['value_actual'] = preg_replace_callback(
                                '/s:(.*):\"(.*?)\";/is',
                                function($match)
                                {
                                    return 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
                                },
                            $aRow['value_actual']); 

И пример с переменной в регулярном выражении, строка:
$sTxt = preg_replace('/\[' . $sBbcode . '=(.*?)\]/ise', "''.\$this->_replaceBbCode('' . \$sBbcode . '', 'prefix', true, '$1').''", $sTxt);

Заменяется так:
            $sTxt = preg_replace_callback(
                '/\[' . $sBbcode . '=(.*?)\]/is',
                function($match) use($sBbcode)
                {
                    return $this->_replaceBbCode($sBbcode, 'prefix', true, $match[1]);
                },
            $sTxt); 

Тут мы добавили функцию use(), в которую поместили переменную из регулярного выражения, тем самым передали переменную в анонимную функцию. Если переменных в регулярном выражении будет больше одной, то просто перечисляем их через запятую, пример:
function($match) use($a, $b, $c)


Устаревшая функция ereg_replace()
Как сообщил официальный сайт PHP: http://php.net/:
С версии PHP 5.3.0 эта функция считается УСТАРЕВШЕЙ. Крайне не рекомендуется полагаться на эту возможность.

А уж в PHP 7 про неё вообще забыли... Можно получить такое сообщение об ошибки:
Fatal error: Uncaught Error: Call to undefined function ereg_replace()

Эту функцию следует заменить на preg_replace(), следуя примеру ниже. Допустим у нас такая строка кода:
$str = ereg_replace('[^ -<>-}]', ' ', str_replace("\x00", ' ', $originalcommentname)); 

Изменяем код так:
$str = preg_replace('/[^ -<>-}]/', ' ', str_replace("\x00", ' ', $originalcommentname)); 

То есть: ereg_replace заменили на: preg_replace, в начало и конец регулярного выражения добавили слеши.
Тоже самое и с функцией ereg.

Замена MYSQL_* на MYSQLI_*
Функции mysql_* уже давно были объявлены устаревшими, а в PHP 7 они удалены, есть mysqli_*, вот на эти функции и будем менять.
И так, например, сейчас у нас такой код:
$db = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($name, $db);

Эти две функции меняем на одну:
$db = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 

Функцию:
mysql_set_charset('utf8');

Меняем так:
mysqli_set_charset($db, 'utf8');

Функцию выполнения запроса:
$result = mysql_query($query); 

Меняем на:
$result = mysqli_query($db, $query); 
Автор:  12:05 13.07.2017