PHP 5.3, Что нового?

Итак, посмототрим – готовы ли вы к PHP-5.3.

  • Появились новые ключевые слова: namespace , goto , Closure.
  • Функции natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip() и array_unique() больше не поддерживают объекты в качестве аргументов. Если вам нужно работать с объектами – вам придется перевести их в массивы.
  • Вывод var_dump теперь включает приватные члены.
  • session_start возвращает false, если старт сессии потерпел неудачу.
  • clearstatcache не очищает realpath cache по умолчанию
  • call_user_func() теперь передает $this, даже если вызывающий – есть родительский класс
  • opendir(), scandir() и dir() теперь использую умолчательный контекст, если контекст не передан им в качестве аргумента
  • Добавлена нативная поддержка функций asinh(), acosh(), atanh(), log1p() и expm1().
  • Stream wrappers теперь могут быть использованы как include_path()
  • Магические методы get(), set(), isset(), unset() и call() теперь всегда должны быть public и больше не могут быть static * toString() больше не может принимать аргументы
  • Введен новый магический метод callStatic() * Новый параметр previous в Exception::construct()
  • SplObjectStorage теперь имеет поддержку ArrayAccess. Это так же позволяет хранить ассоциативную информацию с объектами в SplObjectStorage.
  • ereg-функции вызывают E_DEPRECATED , пользуйтесь PCRE
  • Следующие ini-директивы вызывают E_DEPRECATED при старте
  • – define_syslog_variables
  • – register_globals
  • – register_long_arrays
  • – safe_mode
  • – magic_quotes_gpc
  • – magic_quotes_runtime
  • – magic_quotes_sybase
  • is_a() – больше не является DEPRECATED (устаревшей)

PHP не может быть собран без PCRE, Reflection, SPL

PHP не может быть собран без поддержки FastCGI CGI/FastCGI поддерживают php.ini-файлы в стиле .htaccess ( т.е. per-dir )

  • директивы ini-файла zend_extension_debug и zend_extension_ts заменены на zend_extension
  • zend.ze1_compatibility_mode удалено и вызывает E_ERROR
  • Добавлен новый пользовательский механизм инициализации

и конфигурационные переменные user_ini.filename и user_ini.cache_ttl

Специальные секции в ини-файлах

  • [PATH=/opt/httpd/www.example.com/] и [HOST=www.example.com].
  • Директивы определенные в этих секциях не могут быть переписаны пользовательскими ini-файлами
  • директива ini-файла extension теперь может принимать полные пути
  • умолчательное значение session.use_only_cookies изменено на 1

NOWDOC – то же, что и HEREDOC, но с одинарными кавычками вокруг метки «<’LABEL’

Статические HEREDOC-и могут быть использованы для инициализации статических переменных, членов класса или констант:

      static $foo = <<<LABEL
      Здесь не должно быть переменных...
      LABEL;

Долгожданный оператор ?: Запись $c= $_GET['c']?:'not set'; эквивалентна записи $c= isset($_GET['c'])?$_GET['c']:'not set';

Долгожданные пространства имен:

      namespace my\name;
      $obj = new \my\name\MyClass;

Новые расширения

  • - fileinfo
  • - intl
  • - Phar
  • - SQLite3

Новые Stream Wrappers

  • - glob: * - phar:

Новые функции

    Ядро:    gc_collect_cycles()
                gc_enabled()
                gc_enable()
                gc_disable()
                class_alias()
                get_called_class()
                forward_static_call()
                forward_static_call_array()
                str_getcsv()
                quoted_printable_encode()
                lcfirst()
Массивы:   array_replace()
                array_replace_recursive()
    Дата:    date_add()
                date_sub()
                date_diff()
                date_parse_from_format()
                date_create_from_format()
                date_get_last_errors()
                timezone_version_get()
      INI:     parse_ini_string()
    GMP:     gmp_testbit()
    Hash:    hash_copy()
    JSON:    json_last_error()
   MySQLi:  mysqli_fetch_all()
                mysqli_get_connection_stats()
                mysqli_poll()
                mysqli_reap_async_query()
       Сеть: gethostname()
                header_remove()
  OpenSSL: openssl_random_pseudo_bytes()
    PCNTL:   pcntl_signal_dispatch()
                pcntl_sigprocmask()
                pcntl_sigwaitinfo()
                pcntl_sigtimedwait()
    PCRE:    preg_filter()
    SHM:     msg_queue_exists()
   Streams: stream_supports_lock()
                stream_context_set_default()

Новые глобальные константы

    Ядро:    E_DEPRECATED
                E_USER_DEPRECATED
                __DIR__
                __NAMESPACE__
                PHP_WINDOWS_VERSION_MAJOR
                PHP_WINDOWS_VERSION_MINOR
                PHP_WINDOWS_VERSION_BUILD
                PHP_WINDOWS_VERSION_PLATFORM
                PHP_WINDOWS_VERSION_SP_MAJOR
                PHP_WINDOWS_VERSION_SP_MINOR
                PHP_WINDOWS_VERSION_SUITEMASK
                PHP_WINDOWS_VERSION_PRODUCTTYPE
                PHP_WINDOWS_NT_DOMAIN_CONTROLLER
                PHP_WINDOWS_NT_SERVER
                PHP_WINDOWS_NT_WORKSTATION
      INI:     INI_SCANNER_NORMAL
                INI_SCANNER_RAW
     GD:      IMG_FILTER_PIXELATE
    JSON:    JSON_ERROR_NONE
                JSON_ERROR_DEPTH
                JSON_ERROR_STATE_MISMATCH
                JSON_ERROR_CTRL_CHAR
                JSON_ERROR_SYNTAX
                JSON_FORCE_OBJECT
                JSON_HEX_TAG
                JSON_HEX_AMP
                JSON_HEX_APOS
                JSON_HEX_QUOT
    LDAP:    LDAP_OPT_NETWORK_TIMEOUT
    PCRE:    PREG_BAD_UTF8_OFFSET_ERROR
   PCNTL:   SIG_BLOCK
                SIG_UNBLOCK
                SIG_SETMASK
                SI_USER
                SI_NOINFO
                SI_KERNEL
                SI_QUEUE
                SI_TIMER
                SI_MESGQ
                SI_ASYNCIO
                SI_SIGIO
                SI_TKILL
                CLD_EXITED
                CLD_KILLED
                CLD_DUMPED
                CLD_TRAPPED
                CLD_STOPPED
                CLD_CONTINUED
                TRAP_BRKPT
                TRAP_TRACE
                POLL_IN
                POLL_OUT
                POLL_MSG
                POLL_ERR
                POLL_PRI
                POLL_HUP
                ILL_ILLOPC
                ILL_ILLOPN
                ILL_ILLADR
                ILL_ILLTRP
                ILL_PRVOPC
                ILL_PRVREG
                ILL_COPROC
                ILL_BADSTK
                FPE_INTDIV
                FPE_INTOVF
                FPE_FLTDIV
                FPE_FLTOVF
                FPE_FLTUND
                FPE_FLTRES
                FPE_FLTINV
                FPE_FLTSUB
                SEGV_MAPERR
                SEGV_ACCERR
                BUS_ADRALN
                BUS_ADRERR
                BUS_OBJERR
   Новые классы
     Date:    DateInterval
                DatePeriod
     Phar:    Phar
                PharData
                PharFileInfo
                PharException
     SPL      SplDoublyLinkedList
                SplStack
                SplQueue
                SplHeap
                SplMinHeap
                SplMaxHeap
                SplPriorityQueue
                SplFixedArray
                FilesystemIterator
                GlobIterator
                RecursiveTreeIterator
                MultipleIterator
   Новые методы
    Date:         DateTime::diff()
                     DateTime::add()
                     DateTime::sub()
                     DateTime::createFromFormat()
                     DateTime::getLastErrors()
  PDO_Firebird: PDO::setAttribute()
    Reflection:   ReflectionProperty::setAccessible()
                     ReflectionFunction::inNamespace()
                     ReflectionFunction::getNamespaceName()
                     ReflectionFunction::getShortName()
                     ReflectionClass::inNamespace()
                     ReflectionClass::getNamespaceName()
                     ReflectionClass::getShortName()
     XSL:          XSLTProcessor::setProfiling()
  Новые константы классов
  PDO_Firebird: PDO::FB_ATTR_DATE_FORMAT
                     PDO::FB_ATTR_TIME_FORMAT
                     PDO::FB_ATTR_TIMESTAMP_FORMAT

Пример с константой DIR :

max@maximus:~$ local/bin/php -v
PHP 5.3.0-dev (cli) (built: Feb 13 2008 23:54:55)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies
max@maximus:~$ local/bin/php dir.php
/home/max
/home/max/php5.3
max@maximus:~$ 

dir.php

<?php
echo __DIR__ ,"\n";
include "php5.3/dir2.php";

php5.3/dir2.php

<?php
echo __DIR__."\n";

УРА!!! Скоро код станет читабельней! Прощай неуклюжее dirname(__FILE__); !!!

С 18 февраля активно ведется обсуждение Traits.

Кажется патч почти принят, не принято решение о том какой использовать синтаксис - когда все будет решено, я обновлю данную статью.

Последние изменения: %2010/%03/%22 %01:%Mar