File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / UPGRADING
Revision 1.1.1.5 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 20:03:41 2014 UTC (10 years ago) by misho
Branches: php, MAIN
CVS tags: v5_4_29, HEAD
php 5.4.29

    1: $Id: UPGRADING,v 1.1.1.5 2014/06/15 20:03:41 misho Exp $
    2: 
    3: PHP 5.4 UPGRADE NOTES
    4: 
    5: ===========
    6: 0. Contents
    7: ===========
    8: 
    9: 1. Changes to INI directives
   10: 2. Changes to reserved words and classes
   11: 3. Changes to engine behavior
   12: 4. Changes to existing functions
   13: 5. Changes to existing classes
   14: 6. Changes to existing methods
   15: 7. Deprecated Functionality
   16: 8. Removed Functionality
   17:      a. Removed features
   18:      b. Removed functions
   19:      c. Removed syntax
   20:      d. Removed hash algorithms
   21: 9. Extension Changes:
   22:      a. Extensions no longer maintained
   23:      b. Extensions with changed behavior
   24: 10. Changes in SAPI support
   25: 11. Windows support
   26: 12. New in PHP 5.4:
   27:      a. New features
   28:      b. Syntax additions
   29:      c. New functions
   30:      d. New global constants
   31:      e. New classes
   32:      f. New methods
   33:      g. New hash algorithms
   34: 
   35: =============================
   36: 1. Changes to INI directives
   37: =============================
   38: 
   39: - PHP 5.4 now checks at compile time if /dev/urandom or /dev/arandom
   40:   are present. If either is available, session.entropy_file now
   41:   defaults to that file and session.entropy_length defaults to 32.
   42:   This provides non-blocking entropy to session id generation. If you
   43:   do not want extra entropy for your session ids, add:
   44: 
   45:     session.entropy_file=
   46:     session.entropy_length=0
   47: 
   48:   to your php.ini to preserve pre-PHP 5.4 behavior.
   49: 
   50: - Deprecated php.ini directives will now throw an E_CORE_WARNING's
   51:   instead of the previous E_WARNING's.
   52: 
   53: - The following php.ini directives are no longer available in PHP 5.4
   54:   and will now throw an E_CORE_ERROR upon startup:
   55:   - allow_call_time_pass_reference
   56:   - define_syslog_variables
   57:   - highlight.bg
   58:   - magic_quotes_gpc
   59:   - magic_quotes_runtime
   60:   - magic_quotes_sybase
   61:   - register_globals
   62:   - register_long_arrays
   63:   - safe_mode
   64:   - safe_mode_gid
   65:   - safe_mode_include_dir
   66:   - safe_mode_exec_dir
   67:   - safe_mode_allowed_env_vars
   68:   - safe_mode_protected_env_vars
   69:   - session.bug_compat_42
   70:   - session.bug_compat_warn
   71:   - y2k_compliance
   72:   - zend.ze1_compatibility_mode
   73: 
   74: - the following new php.ini directives were added:
   75:   - max_input_vars - specifies how many GET/POST/COOKIE input
   76:     variables may be accepted. The default value is 1000.
   77: 
   78: - E_ALL now includes E_STRICT.
   79: 
   80: - The recommended production value for error_reporting changed to E_ALL &
   81:   ~E_DEPRECATED & ~E_STRICT.
   82: 
   83: - Added new session support directives:
   84:     session.upload_progress.enabled
   85:     session.upload_progress.cleanup
   86:     session.upload_progress.prefix
   87:     session.upload_progress.name
   88:     session.upload_progress.freq
   89:     session.upload_progress.min_freq
   90: 
   91: - Added a zend.multibyte directive as a replacement of the PHP compile time
   92:   configuration option --enable-zend-multibyte. Now the Zend Engine always
   93:   contains code for multibyte support, which can be enabled or disabled at
   94:   runtime. Note: It doesn't make a lot of sense to enable this option if
   95:   ext/mbstring is not enabled, because most functionality is implemented by
   96:   mbstrings callbacks.
   97: 
   98: - Added zend.script_encoding. This value will be used unless a
   99:   "declare(encoding=...)" directive appears at the top of the script.
  100: 
  101: - Added zend.signal_check to check for replaced signal handlers on shutdown
  102: 
  103: - Added enable_post_data_reading, which is enabled by default. When it's
  104:   disabled, the POST data is not read (or processed); the behavior is similar
  105:   to that of other request methods with body, like PUT. This allows reading
  106:   the raw POST data in multipart requests and reading/processing the POST data
  107:   in a stream fashion (through php://input) without having it copied in memory
  108:   multiple times.
  109: 
  110: - Added windows_show_crt_warning. This directive shows the CRT warnings when
  111:   enabled. These warnings were displayed by default until now. It is disabled
  112:   by default.
  113: 
  114: - Added cli.pager to set a pager for CLI interactive shell output.
  115: 
  116: - Added cli.prompt to configure the CLI interactive shell prompt.
  117: 
  118: - Added cli_server.color to enable the CLI web server to use ANSI color coding
  119:   in terminal output.
  120: 
  121: ========================================
  122: 2. Changes to reserved words and classes
  123: ========================================
  124: 
  125: - "callable", "insteadof" and "trait" are now reserved words.
  126: 
  127: =============================
  128: 3. Changes to engine behavior
  129: =============================
  130: 
  131: - The __construct arguments of an extended abstract constructor must
  132:   now match:
  133: 
  134:   abstract class Base
  135:   {
  136:     abstract public function __construct();
  137:   }
  138:   class Foo extends Base
  139:   {
  140:     public function __construct($bar) {}
  141:   }
  142: 
  143:   This now emits a Fatal error due the incompatible declaration.
  144: 
  145: - In previous versions, superglobal names could be used for parameter
  146:   names, thereby shadowing the corresponding superglobal. In PHP 5.4
  147:   this now causes a fatal error such as "Cannot re-assign auto-global
  148:   variable GLOBALS".
  149: 
  150: - Turning null, false or an empty string into an object by adding a
  151:   property will now emit a warning instead of an E_STRICT error.
  152: 
  153:   $test = null;
  154:   $test->baz = 1;
  155: 
  156:   To create a generic object you can use StdClass:
  157: 
  158:   $test = new StdClass;
  159:   $test->baz = 1;
  160: 
  161: - Converting an array to a string now will cause an E_NOTICE warning.
  162: 
  163: - Non-numeric string offsets, e.g. $a['foo'] where $a is a string, now
  164:   return false on isset() and true on empty(), and produce warning if
  165:   trying to use them. Offsets of types double, bool and null produce
  166:   notice. Numeric strings ($a['2']) still work as before.
  167: 
  168:   Note that offsets like '12.3' and '5 and a half' are considered
  169:   non-numeric and produce warning, but are converted to 12 and 5
  170:   respectively for backwards compatibility reasons.
  171: 
  172: - Long numeric strings that do not fit in integer or double (such as
  173:   "92233720368547758070") are compared using string comparison if 
  174:   they could otherwise result in precision loss - since 5.4.4.
  175: 
  176: - Closures now support scopes and $this and can be rebound to
  177:   objects using Closure::bind() and Closure::bindTo().
  178: 
  179: - <?= is now always available regardless of the short_open_tag
  180:   setting.
  181: 
  182: - Parse error messages are changed to contain more information about
  183:   the error.
  184: 
  185: - __clone and __destruct since 5.4.4 follow the same scoping rules as 
  186:   the rest of the methods (see bug #61782 for details).
  187: 
  188: ================================
  189: 4. Changes to existing functions
  190: ================================
  191: 
  192: - array_combine now returns array() instead of FALSE when two empty arrays are
  193:   provided as parameters.
  194: 
  195: - dns_get_record() has an extra parameter which allows requesting DNS records
  196:   by numeric type and makes the result include only the raw data of the
  197:   response.
  198: 
  199: - call_user_func_array() no longer allows call-time pass by reference.
  200: 
  201: - the default character set for htmlspecialchars() and htmlentities() is
  202:   now UTF-8. In previous versions it was ISO-8859-1. Note that changing
  203:   your output charset via the php.ini default_charset directive does not
  204:   affect htmlspecialchars/htmlentities unless you are passing "" (an 
  205:   empty string) as the encoding parameter to your htmlspecialchars/htmlentities
  206:   calls. 
  207: 
  208: - htmlentities() and htmlspecialchars() are stricter in the code units they
  209:   accept for the asian encodings. For Big5-HKSCS, the octets 0x80 and 0xFF are
  210:   rejected. For GB2312/EUC-CN, the octets 0x8E, 0x8F, 0xA0 and 0xFF are
  211:   rejected. For SJIS, the octets 0x80, 0xA0, 0xFD, 0xFE and 0xFF are rejected,
  212:   except maybe after a valid starting byte. For EUC-JP, the octets 0xA0 and
  213:   0xFF are rejected.
  214: 
  215: - htmlentities() now emits an E_STRICT warning when used with asian characters,
  216:   as in that case htmlentities has (and already had before this version) the
  217:   same functionality as htmlspecialchars.
  218: 
  219: - htmlentities() no longer numerically encodes high characters for single-byte
  220:   encodings (except when there's actually a corresponding named entity). This
  221:   behavior was not documented and was inconsistent with that for "UTF-8".
  222: 
  223: - html_entity_decode() and htmlspecialchars_decode() behave more consistently,
  224:   now decoding entities in malformed strings such as "&&amp;" or "&#&amp;".
  225: 
  226: - htmlentities(), htmlspecialchars(), html_entity_decode(), and
  227:   htmlspecialchars_decode: Added the flags ENT_HTML401, ENT_XML1, ENT_XHTML,
  228:   and ENT_HTML5. The behavior of these functions including, but not limited to,
  229:   the characters that are encoded and the entities that are decoded depend on
  230:   the document type that is specified by those flags.
  231: 
  232: - htmlentities() and htmlspecialchars() with !$double_encode do more strict
  233:   checks on the validity of the entities. Numerical entities are checked for a
  234:   valid range (0 to 0x10FFFF); if the flag ENT_DISALLOWED is given, the
  235:   validity of such numerical entity in the target document type is also
  236:   checked. Named entities are checked for necessary existence in the target
  237:   document type instead of only checking whether they were constituted by
  238:   alphanumeric characters.
  239: 
  240: - The flag ENT_DISALLOWED was added. In addition to the behavior described in
  241:   the item before, it also makes htmlentities() and htmlspecialchars()
  242:   substitute characters that appear literally in the argument string and which
  243:   are not allowed in the target document type with U+FFFD (UTF-8) or &#xFFFD;.
  244: 
  245: - The flag ENT_SUBSTITUTE was added. This flag makes invalid multibyte
  246:   sequences be replaced by U+FFFD (UTF-8) or &#FFFD; by htmlspecialchars() and
  247:   htmlentities(). It is an alternative to the default behavior, which just
  248:   returns an empty string and to ENT_IGNORE, which is a security risk. The
  249:   behavior follows the recommendations of Unicode Technical Report #36.
  250: 
  251: - htmlspecialchars_decode() and html_entity_decode() now decode &apos; if the
  252:   document type is ENT_XML1, ENT_XHTML, or ENT_HTML5.
  253: 
  254: - Charset detection with $charset == '' no longer turns to mbstring's
  255:   internal encoding defined through mb_internal_encoding(). Only the encoding
  256:   defined through the php.ini setting mbstring.internal_encoding is considered.
  257: 
  258: - number_format() no longer truncates multibyte decimal points and thousand
  259:   separators to the first byte.
  260: 
  261: - The third parameter ($matches) to preg_match_all() is now optional. If
  262:   omitted, the function will simply return the number of times the pattern was
  263:   matched in the subject and will have no other side effects.
  264: 
  265: - The second argument of scandir() now accepts SCANDIR_SORT_NONE (2) as a
  266:   possible value. This value results in scandir() performing no sorting: on
  267:   local filesystems, this allows files to be returned in native filesystem
  268:   order.
  269: 
  270: - stream_select() now preserves the keys of the passed array, be they numeric or
  271:   strings. This breaks code that iterated the resulting stream array using a
  272:   numeric index, but makes easier to identify which of the passed streams are
  273:   present in the result.
  274: 
  275: - stream_set_write_buffer() no longer disables the read buffer of a plain
  276:   stream when 0 is given as the second argument.
  277: 
  278: - stream_set_write_buffer() no longer changes the chunk size in socket streams.
  279: 
  280: - fclose() closes streams with resource refcount > 1; it doesn't merely
  281:   decrement the resource refcount.
  282: 
  283: - socket_set_options() and socket_get_options() now support multicast options.
  284: 
  285: - The raw data parameter in openssl_encrypt() and openssl_decrypt() is now an
  286:   options integer rather than a boolean. A value of true produces the same
  287:   behavior.
  288: 
  289: - Write operations within XSLT (for example with the extension sax:output) are
  290:   disabled by default. You can define what is forbidden with the method
  291:   XsltProcess::setSecurityPrefs($options).
  292: 
  293: - Added AES support to OpenSSL.
  294: 
  295: - openssl_csr_new() expects the textual data to be in UTF-8.
  296: 
  297: - Added no-padding option to openssl_encrypt() and openssl_decrypt().
  298: 
  299: - Added a "no_ticket" SSL context option to disable the SessionTicket TLS
  300:   extension.
  301: 
  302: - Added new json_encode() options: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES,
  303:   JSON_NUMERIC_CHECK, JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE.
  304: 
  305: - Added Tokyo Cabinet and Berkley DB 5 support to DBA extension.
  306: 
  307: - Added support for CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE
  308:   to cURL.
  309: 
  310: - Added optional argument to debug_backtrace() and debug_print_backtrace()
  311:   to limit the amount of stack frames returned.
  312: 
  313: - Fixed crypt_blowfish handling of 8-bit characters. crypt() in Blowfish mode
  314:   now supports hashes marked $2a$, $2x$, $2y$ and $2z$.
  315: 
  316: - mbstring now supports following encodings: Shift_JIS/UTF-8 Emoji,
  317:   JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004),
  318:   MacJapanese (Shift_JIS), gb18030.
  319: 
  320: - Added encode and decode in hex format to mb_encode_numericentity() and
  321:   mb_decode_numericentity().
  322: 
  323: - Added support for SORT_NATURAL and SORT_FLAG_CASE in array sort functions:
  324:   sort(), rsort(), ksort(), krsort(), asort(), arsort() and array_multisort().
  325: 
  326: - is_a() and is_subclass_of() now have third boolean parameter, which specifies
  327:   if the first argument can be a string class name. Default if false for is_a
  328:   and true for is_subclass_of() for BC reasons.
  329: 
  330: - ob_start() will now treat a chunk size of 1 as meaning 1 byte, rather than
  331:   the previous special case behavior of treating it as 4096 bytes.
  332: 
  333: - idn_to_ascii() and idn_to_utf8() now take two extra parameters, one indicating
  334:   the variant (IDNA 2003 or UTS #46) and another, passed by reference, to return
  335:   details about the operation in case UTS #46 is chosen.
  336: 
  337: - gzencode() used with FORCE_DEFLATE now generates RFC1950 compliant data.
  338: 
  339: - ob_start() no longer starts multiple output buffers when passed
  340:   array("callback1", "callback2", "callback3", ...).
  341: 
  342: - Since 5.4.4, "php://fd" stream syntax is available only in CLI build.
  343: 
  344: - Since 5.4.5, resourcebundle_create() accepts null for the first two arguments.
  345: 
  346: - Since 5.4.6, SimpleXMLElement::getDocNamespaces() has and extra parameter which
  347:   allows for toggling if the list of namespaces starts from the document root
  348:   or from the node you call the method on
  349: 
  350: - Since 5.4.7, ctor is always called when new user stream wrapper object is created.
  351:   Before, it was called only when stream_open was called.
  352: 
  353: - Manipulated serialization strings for objects implementing Serializable by
  354:   replacing "C:" with "O:" at the start will now produce an error.
  355: 
  356: ==============================
  357: 5. Changes to existing classes
  358: ==============================
  359: 
  360: - Classes that implement stream wrappers can define a method called
  361:   stream_truncate that will respond to truncation, e.g. through ftruncate.
  362:   Strictly speaking, this is an addition to the user-space stream wrapper
  363:   template, not a change to an actual class.
  364: 
  365: - Classes that implement stream wrappers can define a method called
  366:   stream_metadata that will be called on touch(), chmod(), chgrp(), chown().
  367: 
  368: - Arrays cast from SimpleXMLElement now always contain all nodes instead of
  369:   just the first matching node.
  370: 
  371: - All SimpleXMLElement children are now always printed when using var_dump(),
  372:   var_export(), and print_r().
  373: 
  374: - Added iterator support in MySQLi. mysqli_result implements Traversable.
  375: 
  376: ==============================
  377: 6. Changes to existing methods
  378: ==============================
  379: 
  380: - DateTime::parseFromFormat() now has a "+" modifier to allow trailing text in
  381:   the string to parse without throwing an error.
  382: 
  383: - Added the ability to pass options to DOMDocument::loadHTML().
  384: 
  385: - FilesystemIterator, GlobIterator and (Recursive)DirectoryIterator now use
  386:   the default stream context.
  387: 
  388: - Since 5.4.5, the constructor of ResourceBundle accepts NULL for the first two
  389:   arguments.
  390: 
  391: ===========================
  392: 7. Deprecated Functionality
  393: ===========================
  394: 
  395: - The following functions are deprecated in PHP 5.4:
  396:   - mcrypt_generic_end():       use mcrypt_generic_deinit() instead
  397:   - mysql_list_dbs()
  398: 
  399: ========================
  400: 8. Removed Functionality
  401: ========================
  402: 
  403: a. Removed features
  404: 
  405:    The following features have been removed from PHP 5.4:
  406: 
  407:    - Magic quotes
  408:    - Register globals
  409:    - Safe mode
  410:    - Session extension bug compatibility mode
  411:    - Y2K compliance mode
  412: 
  413: b. Removed functions
  414: 
  415:    The following functions are no longer available in PHP 5.4:
  416: 
  417:    - define_syslog_variables()
  418:    - import_request_variables()
  419:    - session_is_registered()
  420:    - session_register()
  421:    - session_unregister()
  422:    - set_magic_quotes_runtime()
  423:    - mysqli_bind_param() (alias of mysqli_stmt_bind_param())
  424:    - mysqli_bind_result() (alias of mysqli_stmt_bind_result())
  425:    - mysqli_client_encoding() (alias of mysqli_character_set_name())
  426:    - mysqli_fetch() (alias of mysqli_stmt_fetch())
  427:    - mysqli_param_count() (alias of mysqli_stmt_param_count())
  428:    - mysqli_get_metadata() (alias of mysqli_stmt_result_metadata())
  429:    - mysqli_send_long_data() (alias of mysqli_stmt_send_long_data())
  430:    - mysqli::client_encoding() (alias of mysqli::character_set_name)
  431:    - mysqli_stmt::stmt() (never worked/always throws, undocumented)
  432: 
  433: c. Removed syntax
  434: 
  435:    - break $var;
  436:    - continue $var;
  437: 
  438: d. Removed hash algorithms
  439: 
  440:    - Salsa10 and Salsa20, which are actually stream ciphers
  441: 
  442: ====================
  443: 9. Extension Changes
  444: ====================
  445: 
  446: a. Extensions no longer maintained
  447: 
  448:    - ext/sqlite is no longer part of the base distribution and has been moved
  449:      to PECL. Use sqlite3 or PDO_SQLITE instead.
  450: 
  451: b. Extensions with changed behavior
  452: 
  453:    - The MySQL extensions (ext/mysql, mysqli and PDO_MYSQL) use mysqlnd
  454:      as the default library now. It is still possible to use libmysql by
  455:      specifying a path to the configure options.
  456: 
  457:    - PDO_MYSQL: Support for linking with MySQL client libraries older
  458:      than 4.1 is removed.
  459: 
  460:    - The session extension now can hook into the file upload feature
  461:      in order to provide upload progress information through session
  462:      variables.
  463: 
  464:    - SNMP extension
  465:      - Functions in SNMP extension now returns FALSE on every error
  466:        condition including SNMP-related (no such instance, end of MIB,
  467:        etc). Thus, in patricular, breaks previous behavior of get/walk
  468:        functions returning an empty string on SNMP-related errors.
  469:      - Multi OID get/getnext/set queries are now supported.
  470:      - New constants added for use in snmp_set_oid_output_format()
  471:        function.
  472:      - Function snmp_set_valueretrieval() changed it's behavior:
  473: 	    SNMP_VALUE_OBJECT can be combined with one of
  474: 	    SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY resulting OID value
  475: 	    changes. When no SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY
  476: 	    is supplied with SNMP_VALUE_OBJECT, SNMP_VALUE_LIBRARY is used.
  477: 	    Prior to 5.4.0 when no SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY
  478: 	    was supplied with SNMP_VALUE_OBJECT, SNMP_VALUE_PLAIN was used.
  479:      - Added feature-rich OO API (SNMP class)
  480:      - Dropped UCD-SNMP compatibility code. Consider upgrading to
  481:        net-snmp v5.3+. Net-SNMP v5.4+ is required for Windows version.
  482:      - In sake of adding support for IPv6 DNS name resolution of
  483:        remote SNMP agent (peer) is done by extension now, not by Net-SNMP
  484:        library anymore.
  485: 
  486:    - Date extension
  487:      - Setting the timezone with the TZ environment variable is no longer
  488:        supported, instead date.timezone and/or date_default_timezone_set()
  489:        have to be used.
  490:      - The extension will no longer guess the default timezone if none
  491:        is set with date.timezone and/or date_default_timezone_set().
  492:        Instead it will always fall back to "UTC".
  493: 
  494:    - Hash extension
  495:      - the output of the tiger hash family has been corrected, see
  496:        https://bugs.php.net/61307
  497: 
  498: ===========================
  499: 10. Changes in SAPI support
  500: ===========================
  501: 
  502: - A REQUEST_TIME_FLOAT value returns a floating point number indicating the
  503:   time with microsecond precision. All SAPIs providing this value should be
  504:   returning float and not time_t.
  505: 
  506: - apache_child_terminate(), getallheaders(), apache_request_headers()
  507:   and apache_response_headers() are now supported on FastCGI.
  508: 
  509: - The interactive shell allows a shortcut #inisetting=value to change php.ini
  510:   settings at run-time.
  511: 
  512: - The interactive shell now works with the shared readline extension.
  513: 
  514: - The interactive shell no longer terminates on fatal errors.
  515: 
  516: - A new PHP CLI command line option --rz <name> shows information about the
  517:   named Zend extension.
  518: 
  519: ===================
  520: 11. Windows support
  521: ===================
  522: 
  523: - is_link now works properly for symbolic links on Windows Vista
  524:   or later. Earlier systems do not support symbolic links.
  525: 
  526: - As of PHP 5.4.5 and above the COM extension isn't compiled statically in PHP
  527:   anymore but shared. It'll still be delivered with the standard PHP release but
  528:   must be activated manually with the "extension = php_com_dotnet.dll" directive
  529:   in php.ini.
  530: 
  531: - Apache 2.4 handler is supported as of PHP 5.4.9
  532: 
  533: ==================
  534: 12. New in PHP 5.4
  535: ==================
  536: 
  537: a. New Features
  538: 
  539:   - A built-in CLI web server for testing purposes is now available:
  540:      $ php -S 127.0.0.1:8888
  541: 
  542:   - File Upload Progress support is implemented in the Session extension.
  543: 
  544: b. Syntax additions
  545: 
  546:   - Traits:
  547:       trait HelloWorld {
  548: 	  public function sayHello() {
  549: 	      echo 'Hello World!';
  550: 	  }
  551:       }
  552: 
  553:       class CanIGetHello {
  554: 	  use HelloWorld;
  555:       }
  556: 
  557:       $hello = new CanIGetHello();
  558:       $hello->sayHello();
  559: 
  560:   - Function call result array access, e.g.:
  561:       foo()[0]
  562:       $foo->bar()[0]
  563: 
  564:   - Callable typehint indicating argument must be callable:
  565:       function foo(callable $do) {
  566:       }
  567:       foo("strcmp");
  568:       foo(function() {});
  569:       $o = new ArrayObject();
  570:       foo(array($o, "count"));
  571: 
  572:   - Short array syntax:
  573:       $a = [1, 2, 3, 4];
  574:       $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
  575:       $a = ['one' => 1, 2, 'three' => 3, 4];
  576: 
  577:   - Binary number format:
  578:       0b00100 0b010101
  579: 
  580:   - Chained string array offsets now work.
  581:       $a = "abc";
  582:       echo $a[0][0];
  583: 
  584:   - Anonymous functions now support using $this and class scope.
  585:     Anonymous function can be declared as "static" to ignore the scope.
  586: 
  587:   - Class::{expr}() syntax is now supported:
  588:       class A {
  589: 	  static function foo() {
  590: 	      echo "Hello world!\n";
  591: 	  }
  592:       }
  593:       $x = "f";
  594:       $y = "o";
  595:       A::{$x.$y.$y}();
  596: 
  597:   - Class member access on instantiation:
  598:       (new foo)->method()
  599:       (new foo)->property
  600:       (new foo)[0]
  601: 
  602: 
  603: c. New functions
  604: 
  605:   - Core:
  606:     - get_declared_traits()
  607:     - getimagesizefromstring()
  608:     - hex2bin()
  609:     - header_register_callback()
  610:     - http_response_code()
  611:     - stream_set_chunk_size()
  612:     - socket_import_stream()
  613:     - trait_exists()
  614: 
  615:   - Intl:
  616:     - transliterator_create()
  617:     - transliterator_create_from_rules()
  618:     - transliterator_create_inverse()
  619:     - transliterator_get_error_code()
  620:     - transliterator_get_error_message()
  621:     - transliterator_list_ids()
  622:     - transliterator_transliterate()
  623: 
  624:   - LDAP:
  625:     - ldap_control_paged_result()
  626:     - ldap_control_paged_result_response()
  627:     - ldap_modify_batch (5.4.26)
  628: 
  629:   - libxml:
  630:     - libxml_set_external_entity_loader()
  631: 
  632:   - mysqli:
  633:     - mysqli_error_list()
  634:     - mysqli_stmt_error_list()
  635: 
  636:   - pgsql
  637:     - pg_escape_identifier() (5.4.4)
  638:     - pg_escape_literal() (5.4.4)
  639: 
  640:   - Session:
  641:     - session_register_shutdown()
  642:     - session_status()
  643: 
  644:   - SPL
  645:     - class_uses()
  646: 
  647:   - SplFixedArray
  648:     - SplFixedArray::__wakeup() (5.4.18)
  649: 
  650: d. New global constants
  651: 
  652:   - CURLOPT_MAX_RECV_SPEED_LARGE
  653:   - CURLOPT_MAX_SEND_SPEED_LARGE
  654:   - ENT_DISALLOWED
  655:   - ENT_HTML401
  656:   - ENT_HTML5
  657:   - ENT_SUBSTITUTE
  658:   - ENT_XHTML
  659:   - ENT_XML1
  660:   - IPPROTO_IP
  661:   - IPPROTO_IPV6
  662:   - IPV6_MULTICAST_HOPS
  663:   - IPV6_MULTICAST_IF
  664:   - IPV6_MULTICAST_LOOP
  665:   - IP_MULTICAST_IF
  666:   - IP_MULTICAST_LOOP
  667:   - IP_MULTICAST_TTL
  668:   - JSON_BIGINT_AS_STRING
  669:   - JSON_OBJECT_AS_ARRAY
  670:   - JSON_PRETTY_PRINT
  671:   - JSON_UNESCAPED_SLASHES
  672:   - JSON_UNESCAPED_UNICODE
  673:   - LIBXML_HTML_NODEFDTD
  674:   - LIBXML_HTML_NOIMPLIED
  675:   - LIBXML_PEDANTIC
  676:   - MCAST_JOIN_GROUP
  677:   - MCAST_LEAVE_GROUP
  678:   - MCAST_BLOCK_SOURCE
  679:   - MCAST_UNBLOCK_SOURCE
  680:   - MCAST_JOIN_SOURCE_GROUP
  681:   - MCAST_LEAVE_SOURCE_GROUP
  682:   - OPENSSL_CIPHER_AES_128_CBC
  683:   - OPENSSL_CIPHER_AES_192_CBC
  684:   - OPENSSL_CIPHER_AES_256_CBC
  685:   - OPENSSL_RAW_DATA
  686:   - OPENSSL_ZERO_PADDING
  687:   - PHP_OUTPUT_HANDLER_CLEAN
  688:   - PHP_OUTPUT_HANDLER_CLEANABLE
  689:   - PHP_OUTPUT_HANDLER_DISABLED
  690:   - PHP_OUTPUT_HANDLER_FINAL
  691:   - PHP_OUTPUT_HANDLER_FLUSH
  692:   - PHP_OUTPUT_HANDLER_FLUSHABLE
  693:   - PHP_OUTPUT_HANDLER_REMOVABLE
  694:   - PHP_OUTPUT_HANDLER_STARTED
  695:   - PHP_OUTPUT_HANDLER_STDFLAGS
  696:   - PHP_OUTPUT_HANDLER_WRITE
  697:   - PHP_QUERY_RFC1738
  698:   - PHP_QUERY_RFC3986
  699:   - PHP_SESSION_ACTIVE
  700:   - PHP_SESSION_DISABLED
  701:   - PHP_SESSION_NONE
  702:   - SCANDIR_SORT_ASCENDING
  703:   - SCANDIR_SORT_DESCENDING
  704:   - SCANDIR_SORT_NONE
  705:   - SORT_FLAG_CASE
  706:   - SORT_NATURAL
  707:   - STREAM_META_ACCESS
  708:   - STREAM_META_GROUP
  709:   - STREAM_META_GROUP_NAME
  710:   - STREAM_META_OWNER
  711:   - STREAM_META_OWNER_NAME
  712:   - STREAM_META_TOUCH
  713:   - T_CALLABLE
  714:   - T_INSTEADOF
  715:   - T_TRAIT
  716:   - T_TRAIT_C
  717:   - ZLIB_ENCODING_DEFLATE
  718:   - ZLIB_ENCODING_GZIP
  719:   - ZLIB_ENCODING_RAW
  720:   - U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
  721:   - IDNA_CHECK_BIDI
  722:   - IDNA_CHECK_CONTEXTJ
  723:   - IDNA_NONTRANSITIONAL_TO_ASCII
  724:   - IDNA_NONTRANSITIONAL_TO_UNICODE
  725:   - INTL_IDNA_VARIANT_2003
  726:   - INTL_IDNA_VARIANT_UTS46
  727:   - IDNA_ERROR_EMPTY_LABEL
  728:   - IDNA_ERROR_LABEL_TOO_LONG
  729:   - IDNA_ERROR_DOMAIN_NAME_TOO_LONG
  730:   - IDNA_ERROR_LEADING_HYPHEN
  731:   - IDNA_ERROR_TRAILING_HYPHEN
  732:   - IDNA_ERROR_HYPHEN_3_4
  733:   - IDNA_ERROR_LEADING_COMBINING_MARK
  734:   - IDNA_ERROR_DISALLOWED
  735:   - IDNA_ERROR_PUNYCODE
  736:   - IDNA_ERROR_LABEL_HAS_DOT
  737:   - IDNA_ERROR_INVALID_ACE_LABEL
  738:   - IDNA_ERROR_BIDI
  739:   - IDNA_ERROR_CONTEXTJ
  740: 
  741: e. New classes
  742: 
  743:   - Reflection:
  744:     - ReflectionZendExtension
  745: 
  746:   - Intl:
  747:     - Transliterator
  748:     - Spoofchecker
  749: 
  750:   - JSON:
  751:     - JsonSerializable
  752: 
  753:   - Session:
  754:     - SessionHandler
  755: 
  756:   - SNMP:
  757:     - SNMP
  758: 
  759:   - SPL:
  760:     - CallbackFilterIterator
  761:     - RecursiveCallbackFilterIterator
  762: 
  763: f. New methods
  764: 
  765:   - Closure:
  766:     - Closure::bind()
  767:     - Closure::bindTo()
  768: 
  769:   - Reflection:
  770:     - ReflectionClass::getTraitAliases()
  771:     - ReflectionClass::getTraitNames()
  772:     - ReflectionClass::getTraits()
  773:     - ReflectionClass::isCloneable()
  774:     - ReflectionClass::isTrait()
  775:     - ReflectionClass::newInstanceWithoutConstructor()
  776:     - ReflectionExtension::isPersistent()
  777:     - ReflectionExtension::isTemporary()
  778:     - ReflectionFunction::getClosure()
  779:     - ReflectionFunction::getClosureScopeClass()
  780:     - ReflectionFunction::getClosureThis()
  781:     - ReflectionFunctionAbstract::getClosureScopeClass()
  782:     - ReflectionFunctionAbstract::getClosureThis()
  783:     - ReflectionMethod::getClosure()
  784:     - ReflectionMethod::getClosureScopeClass()
  785:     - ReflectionMethod::getClosureThis()
  786:     - ReflectionObject::getTraitAliases()
  787:     - ReflectionObject::getTraitNames()
  788:     - ReflectionObject::getTraits()
  789:     - ReflectionObject::isCloneable()
  790:     - ReflectionObject::isTrait()
  791:     - ReflectionObject::newInstanceWithoutConstructor()
  792:     - ReflectionParameter::canBePassedByValue()
  793:     - ReflectionParameter::isCallable()
  794: 
  795:   - PDO_DBLIB:
  796:     - PDO::newRowset()
  797: 
  798:   - SPL:
  799:     - DirectoryIterator::getExtension()
  800:     - RegexIterator::getRegex()
  801:     - SplDoublyLinkedList::serialize()
  802:     - SplDoublyLinkedList::unserialize()
  803:     - SplFileInfo::getExtension()
  804:     - SplFileObject::fputcsv()
  805:     - SplObjectStorage::getHash()
  806:     - SplQueue::serialize
  807:     - SplQueue::unserialize
  808:     - SplStack::serialize
  809:     - SplStack::unserialize
  810:     - SplTempFileObject::fputcsv
  811: 
  812:   - XSLT:
  813:     - XsltProcessor::setSecurityPrefs()
  814:     - XsltProcessor::getSecurityPrefs()
  815: 
  816:   - Zlib:
  817:     - zlib_decode()
  818:     - zlib_encode()
  819: 
  820: g. New Hash algorithms
  821: 
  822:   - fnv132
  823:   - fnv164
  824:   - joaat

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>