Главная > PHP > Вышел PHP 5.4.0

Вышел PHP 5.4.0

02.03.2012 0 коммент. » Просмотры: 1 545
 

Ссылочки по теме:

Прокомментирую то, о чем знаю..

  • Removed legacy features (Удаленные фишки)

    • break/continue $var syntax.
      Убрали возможность делать так:

      $b=2
      for($i=1;$i<5;$i++)
      {
       for($j=1;$j<5;$j++)
       {
          if ($i=$j) break $b;
       }
      }

      т.е. в break нельзя передавать переменную, но возможность передать число осталась:

      for($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
    • есть еще несколько изменений, которые мне не так интересны, смотрите их по ссылке выше..
  • General improvements (Основные улучшения)
    • Added short array syntax support ([1,2,3]), see UPGRADING guide for full details.
      Добавили возможность чуть по другому создавать массивы - укоротили синтаксис

      //так писали раньше
      $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

      Пример кода:

      class 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();

      Результат:

      Hello world
    • Added closure $this support back.
      Про это много не скажу. Знаю только что замыкания (closure) добавили в версии 5.3 и если я не ошибаюсь они нужны для доступа к переменным родительской функции, которая вернула в качестве результата работы, ссылку на свою внутреннюю функцию. Ога, я тоже никогда не сталкивался с использованием таких подходов..
      Но кому интересно, можно почитать тут: Замыкания в php
    • Added array dereferencing support.
      Это отличная вещь. Позволяющая не создавать отдельных переменных, для использования массивов:

      function getConfig() {
        return Array('var'=>'val', 'var1'=>'val1', 'var2'=>'val2');
      }
      $value = getConfig()['var'];
    • Added callable typehint.
      Добавлена возможность указать тип передаваемого объекта в функции как callable, что подразумевает под собой метод который можно вызвать.
      Тестовый пример:

      class TestClass {
          public function test(callable $callback) {
              var_dump($callback);
          }
      }
    • Added class member access on instantiation (e.g. (new foo)->bar()) support.
      Тоже хорошее известие. Теперь можно вызывать методы безымянных классов.

      class 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, Ура, ура, ура!!!
    • есть еще несколько изменений, которые мне не так интересны, смотрите их по ссылке выше..
  • Improved CLI SAPI
    • Added built-in web server that is intended for testing purpose.
      Добавили встроенный веб-сервер для тестирования скриптов. Не Apache, но работает 🙂

Автор: | Теги:

Важно

У нас заработал ФОРУМ. Все вопросы, которые не касаются статьи, а так же вопросы по конкретно вашему случаю нужно задавать и обсуждать именно там, в разделе "Помощь пользователям".

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>