Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Переход с PHP 5.2 на 5.3.  (Прочитано 17296 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« : 02-05-2011 10:28 » 

Кто-нибудь уже озадачивался?

Я прошелся по изменениям и новшествам.

http://www.php.net/manual/en/migration53.php
http://www.php.net/manual/en/migration53.changes.php
Цитата
Most improvements in PHP 5.3.x have no impact on existing code. There are a few incompatibilities and new features that should be considered, and code should be tested before switching PHP versions in production environments.
http://www.php.net/manual/en/migration53.incompatible.php
http://www.php.net/manual/en/migration53.new-features.php


Существенные изменения:

1.
http://www.php.net/manual/en/function.call-user-func.php
Цитата
The interpretation of object oriented keywords like parent and self has changed. Previously, calling them using the double colon syntax would emit an E_STRICT warning because they were interpreted as static.

2.
Цитата
The behaviour of functions with by-reference parameters called by value has changed. Where previously the function would accept the by-value argument, a fatal error is now emitted. Any previous code passing constants or literals to functions expecting references, will need altering to assign the value to a variable before calling the function.
Если где кривой код - вылезет fatal error.

3.
Цитата
The new mysqlnd library necessitates the use of MySQL 4.1's newer 41-byte password format. Continued use of the old 16-byte passwords will cause mysql_connect() and similar functions to emit the error, "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
Цитата
The new mysqlnd library does not read mysql configuration files (my.cnf/my.ini), as the older libmysql library does. If your code relies on settings in the configuration file, you can load it explicitly with the mysqli_options() function. Note that this means the PDO specific constants PDO::MYSQL_ATTR_READ_DEFAULT_FILE and PDO::MYSQL_ATTR_READ_DEFAULT_GROUP are not defined if MySQL support in PDO is compiled with mysqlnd.
Думаю, тут у нас все в порядке. Посмотрим.

4.
Цитата
# The trailing / has been removed from the SplFileInfo class and other related directory classes.
# The __toString magic method can no longer accept arguments.
# The magic methods __get, __set, __isset, __unset, and __call must always be public and can no longer be static. Method signatures are now enforced.
# The __call magic method is now invoked on access to private and protected methods.
# func_get_arg(), func_get_args() and func_num_args() can no longer be called from the outermost scope of a file that has been included by calling include() or require() from within a function in the calling file.
Ничего не могу сказать. Если где криво...


Добавлено через 13 минут и 49 секунд:
Бррр.... В 5.3 добавили оператор goto! Быть такого не может
Офигеть!

Еще napespace внедрили, но на первый взгляд как-то сложно сделали.

Добавлено через 24 минуты и 9 секунд:
Из интересного хорошего:
1. Support for Late Static Bindings has been added.
2. There are two new magic methods, __callStatic and __invoke.
3. Появились замыкания. Заждались.
4. Новый heredoc - "nowdoc" - теперь без интерполяции.
5. Сокращенный вариант "?:". Давно пора.
6. Вложенные исключения. Хм... Разве раньше было нельзя?...
7. A garbage collector for circular references has been added, and is enabled by default.
8. The mail() function now supports logging of sent email. Интересно...

Странно, что такой популярный язык так долго обзаводится элементарными вещами.


Добавлено через 79 дней, 11 часов, 2 минуты и 14 секунд:
Значит в активе...

eaccelerator версии 0.9.5.3 не собирается с PHP 5.3. Собирается 0.9.6.1, но в этой версии нет пользовательского кеша.

Добавлено через 79 дней, 8 часов, 24 минуты и 4 секунды:
Не всякий софт, как оказалось, готов к обновлению PHP. А ведь через пару лет в массы пойдет 6.0 - надо готовиться.


Добавлено через 79 дней, 7 часов, 29 минут и 40 секунд:
Надо внимательно следить за устаревшими функциями. Например, исчезли такие популярные, как mysql_escape_string, split, eregi.
« Последнее редактирование: 20-07-2011 22:08 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-07-2011 06:42 » 

Оп-па. А что же вместо mysql_escape_string?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 22-07-2011 06:50 » 

mysql_real_escape_string Улыбаюсь
Одноименная функция из cишного API. Зачем это было делать в PHP API - ума не приложу. Тем более, что модуль mysql устарел и не поддерживает фич MySQL 5.x. Вместо него желательно использовать pdo-mysql или mysqli.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 22-07-2011 08:59 » new

Переходить на 5.3 нужно хотя бы потому, что ветку 5.2 больше не развивают и, соотв., не будет исправления баго-фич и добавления нового.

Форум и смежные сайты, кстати, уже переведены на 5.3.6. Не так уж много исправлять потребовалось.

Основные замены, которые мне встретились в нескольких движках (SMF, плагины MediaWiki, галерея):
1. mysql_escape_string -> mysql_real_escape_string: синтаксис функций идентичен.
2. ereg* -> preg*: синтаксис идентичен, но для preg нужны ограничители регулярного выражения.
3. mhash -> hash: другой первый параметр - вместо константы нужна строка. И проверка наличия функционала делается не через  defined(MHASH_cyther), а через in_array('cypher', hash_algos()).
« Последнее редактирование: 22-07-2011 09:08 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines