Вышел PHP 5.4.0
Прокомментирую то, о чем знаю..
- Removed legacy features (Удаленные фишки)
- break/continue $var syntax.
Убрали возможность делать так:
12345678910$b=2for($i=1;$i<5;$i++){for($j=1;$j<5;$j++){if ($i=$j) break $b;}}
т.е. в break нельзя передавать переменную, но возможность передать число осталась:
123456789for($i=1;$i<5;$i++){for($j=1;$j<5;$j++){if ($i=$j) break(2);}} - Safe mode and all related ini options.
Эта опция позволяла ограничивать юзеров на уровне php, и хотя это надо делать не на уровне php, многие хостеры её использовали. Ну что же, теперь: пока-пока! Подробнее про эту опцию написано тут: Безопасный режим - register_globals and register_long_arrays ini options.
Это мне нравится. Первая, во включенном состоянии позволяла, переданные в переменную данные, например, get запросом, автоматически конвертировать в переменные внутри скрипта, с именем переданным в параметрах. Вторая позволяла включить старый синтаксис предопределенных массивов: $HTTP_ИМЯ_VARS.Например: $HTTP_SERVER_VARS. Напомню, что их заменили на короткие названия в версии 4.1, т.е. теперь они доступны, например так $_SERVER. - import_request_variables().
Эта штука импортировала переменные $_GET, $_POST и $_COOKIE в глобальную область видимости. Т.е. из той же оперы что и register_globals. - allow_call_time_pass_reference.
Эта директива, позволяла определить включена ли возможность передачи аргументов по ссылке во время вызова функции. Удалена, потому что передачу по ссылке тоже убрали. - session_is_registered(), session_register() and session_unregister() functions.
Устаревшие функции по работе с сессиями - magic_quotes_gpc, magic_quotes_runtime and magic_quotes_sybase ini options. get_magic_quotes_gpc, get_magic_quotes_runtime are kept but always return false, set_magic_quotes_runtime raises an E_CORE_ERROR.
Вот это отличная новость. Давно уже все согласились, что это лишняя возможность (авто добавление слеша к кавычкам), но все равно переодически, встречается на серверах. Ура, ура, ура!!! - Removed support for putenv("TZ=..") for setting the timezone.
Стало нельзя задавать временную зону через переменную окружения TZ - Removed the timezone guessing algorithm in case the timezone isn't set with date.timezone or date_default_timezone_set(). Instead of a guessed timezone, "UTC" is now used instead.
Вместо угадывания часовой зоны, в случае если она не задана через date_default_timezone_set() или в INI файле с помощью дерективы date.timezone, используется время UTC - есть еще несколько изменений, которые мне не так интересны, смотрите их по ссылке выше..
- break/continue $var syntax.
- General improvements (Основные улучшения)
- Added short array syntax support ([1,2,3]), see UPGRADING guide for full details.
Добавили возможность чуть по другому создавать массивы - укоротили синтаксис
123456789101112131415//так писали раньше$a = array('a', 'b', 'c');//теперь можно писать так$a = ['a', 'b', 'c']//так писали раньше$a = array('a'=>1, 'b'=>2, 'c'=>3);//теперь можно писать так$a = ['a'=>1, 'b'=>2, 'c'=>3];//или так:$a = ['a':1, 'b':2, 'c':3]; - Added binary numbers format (0b001010).
Теперь можно использовать бинарные числа. Удобно для работы с масками. - Added support for Class::{expr}() syntax.
- Added multibyte support by default. Previously php had to be compiled with --enable-zend-multibyte. Now it can be enabled or disabled through zend.multibyte directive in php.ini.
Вот это отличная новость. Говорящая о том, что поддержки мультибайтовых строк (например urtf8) сделали по-умолчанию. Теперь не надо думать когда использовать strlen, а когда mb_strlen - Removed compile time dependency from ext/mbstring.
Пока-пока функции семейства mb_* - Added support for Traits.
Говорят это хорошая весть, для тех кто ждал этого функционала. Для меня особой радости нет. Почитать что это такое можно в гугле. Я же согласен с комментатором gnomeby на хабре:При всём при том, что PHP мой основной язык, я жду двух вещей от типажей:
* Новый тип говнокода с типажами, в котором будет сложно разобраться.
* Малая распространенность типажей, ибо не понятно зачем они нужны (для множественного наследования говорите? Как часто это вам надо?).Полное описание этого чуда тут: Traits - Reuse of Behavior
Пример кода:
123456789101112131415161718192021class Base {public function sayHello() {echo 'Hello ';}}trait SayWorld {public function sayHello() {parent::sayHello();echo 'World!';}}class MyHelloWorld extends Base {use SayWorld;}$o = new MyHelloWorld();$o->sayHello();
Результат:
123Hello world - Added closure $this support back.
Про это много не скажу. Знаю только что замыкания (closure) добавили в версии 5.3 и если я не ошибаюсь они нужны для доступа к переменным родительской функции, которая вернула в качестве результата работы, ссылку на свою внутреннюю функцию. Ога, я тоже никогда не сталкивался с использованием таких подходов..
Но кому интересно, можно почитать тут: Замыкания в php - Added array dereferencing support.
Это отличная вещь. Позволяющая не создавать отдельных переменных, для использования массивов:
123456function getConfig() {return Array('var'=>'val', 'var1'=>'val1', 'var2'=>'val2');}$value = getConfig()['var']; - Added callable typehint.
Добавлена возможность указать тип передаваемого объекта в функции как callable, что подразумевает под собой метод который можно вызвать.
Тестовый пример:
1234567class TestClass {public function test(callable $callback) {var_dump($callback);}} - Added class member access on instantiation (e.g. (new foo)->bar()) support.
Тоже хорошее известие. Теперь можно вызывать методы безымянных классов.
123456789101112131415class Config {private $conf;public function __construct(){$this->conf = ['hello'=>'Hello world!'];}public function getValue($var){return $this->conf[$var];}}echo (new Config)->getValue('hello'); - <?= is now always available regardless of the short_open_tag setting.
Вот это тоже мега шаг! На многих хостингах встречается short_open_tag=off. Поэтому такое там переставало работать <?='abc'?>, и приходилось все эти конструкции заменять на <?php echo 'abc';?> и когда у тебя скрипт использует 20-50 шаблонов, то менять очень гемморойно. Конечно им надо было бы вообще заменить <?php на <? по-умолчанию. А то теперешняя ситуация, еще больше запутает неопытных людей: <?=$i++?> работает, а <? $i++?> нет... - Changed default value of "default_charset" php.ini option from ISO-8859-1 to UTF-8.
Теперь по-умолчанию все будет работь с utf8, Ура, ура, ура!!! - есть еще несколько изменений, которые мне не так интересны, смотрите их по ссылке выше..
- Added short array syntax support ([1,2,3]), see UPGRADING guide for full details.
- Improved CLI SAPI
- Added built-in web server that is intended for testing purpose.
Добавили встроенный веб-сервер для тестирования скриптов. Не Apache, но работает 🙂
- Added built-in web server that is intended for testing purpose.
Author: | Tags: /
| Rating:
Leave a Reply