На главную
  Назад в „PHP“  

Что пришлось править

Сайт, с которым пришлось работать использовал одну экзотическую CMS, поэтому большинство работы как раз и пришлось не на правку скриптов сайта, а на обновление этой CMS.

Для начала пришлось разобраться с функциями ereg и eregi которые в PHP 5.3 объявлены устаревшими (deprecated). Так-как функция активно использовалась в движке, то руками править кучу файлов не резон, поэтому используется Notepad++ у которого есть функция замены в файлах по маске регулярного выражения. К сожалению даже в седьмой версии моей текущей IDE Netbeans такого счастья не предусмотрено (грустный смайл).
Хорошая вики по регуляркам Notepad++.


ereg()

Всё упирается в написание корректного регулярника для замены ereg("выражение") на preg_match("/выражение/").
А вот и оно
барабанная дробь
Search for:     ereg\((['"])(.*)(['"])([,\)])
Replace by:     preg_match(\1/\2/\3\4



mysql_list_tables()

Эта функция также объявлена устаревшей (deprecated), поэтому нуждается в замене. Её целью является получить список всех таблиц в целевой базе данных:
$result = mysql_list_tables(self::$db, self::$identifier);
Поэтому она заменяется простым запросом:
$result = mysql_query( "SHOW TABLES FROM ".self::$db, self::$identifier);

*Вместо self::$db конечно может быть записано имя базы.


eval()

Вспоминаем, что начиная с 5.3 РНР не разрешает обращаться к обычным методам с использованием синтаксиса доступа к статическим свойствам/методам, и все строки вида
eval ("return $class_name::__construct();");
меняем на такое вот
$class_return = new $class_name();

Ещё пример

$result .= eval(
        "parser_".$parser."::$modifier = $modifier; "
        "parser_".$parser."::__construct(); "
        "return parser_".$parser."::parse(".$value.");"
);

меняем на

$parser_base ="parser_";
        $parser_name = $parser_base.$parser;
        $parser_obj = new $parser_name();
        $parser_obj::$modifier = $modifier;
        $result .= $parser_obj->parse( $value );
);


get_called_class()

Эта функция добавлена в 5.3 и на мой взгляд является отличным инструментом для создания более элегантного, компактного и эффективного кода. В своём ORM велосипеде я её активно использую, жаль только, что большинство проектов всё ещё на версиях РНР ниже 5.3.



Пока всё. Успешных проектов!



  Наверх