UPGRADING 25.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
$Id$

PHP 5.4 UPGRADE NOTES

===========
0. Contents
===========

1. Changes to INI directives
2. Changes to reserved words and classes
3. Changes to engine behavior
4. Changes to existing functions
5. Changes to existing classes
6. Changes to existing methods
7. Deprecated Functionality
8. Removed Functionality
     a. Removed features
     b. Removed functions
     c. Removed syntax
     d. Removed hash algorithms
9. Extension Changes:
     a. Extensions no longer maintained
     b. Extensions with changed behavior
24
10. Changes in SAPI support
25 26 27 28 29 30 31 32 33
11. Windows support
12. New in PHP 5.4:
     a. New features
     b. Syntax additions
     c. New functions
     d. New global constants
     e. New classes
     f. New methods
     g. New hash algorithms
34

35 36 37
=============================
1. Changes to INI directives
=============================
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 46 47

    session.entropy_file=
    session.entropy_length=0

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 52
  instead of the previous E_WARNING's.

53 54
- The following php.ini directives are no longer available in PHP 5.4
  and will now throw an E_CORE_ERROR upon startup:
55 56 57
  - allow_call_time_pass_reference
  - define_syslog_variables
  - highlight.bg
58 59 60
  - magic_quotes_gpc
  - magic_quotes_runtime
  - magic_quotes_sybase
61 62 63 64 65 66 67 68
  - register_globals
  - register_long_arrays
  - safe_mode
  - safe_mode_gid
  - safe_mode_include_dir
  - safe_mode_exec_dir
  - safe_mode_allowed_env_vars
  - safe_mode_protected_env_vars
69 70 71
  - session.bug_compat_42
  - session.bug_compat_warn
  - y2k_compliance
72
  - zend.ze1_compatibility_mode
73

74 75 76
- the following new php.ini directives were added:
  - max_input_vars - specifies how many GET/POST/COOKIE input
    variables may be accepted. The default value is 1000.
77

78
- E_ALL now includes E_STRICT.
79

80 81 82 83 84 85 86 87 88 89 90 91
- The recommended production value for error_reporting changed to E_ALL &
  ~E_DEPRECATED & ~E_STRICT.

- Added new session support directives:
    session.upload_progress.enabled
    session.upload_progress.cleanup
    session.upload_progress.prefix
    session.upload_progress.name
    session.upload_progress.freq
    session.upload_progress.min_freq

- 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109
  ext/mbstring is not enabled, because most functionality is implemented by
  mbstrings callbacks.

- Added zend.script_encoding. This value will be used unless a
  "declare(encoding=...)" directive appears at the top of the script.

- Added zend.signal_check to check for replaced signal handlers on shutdown

- Added enable_post_data_reading, which is enabled by default. When it's
  disabled, the POST data is not read (or processed); the behavior is similar
  to that of other request methods with body, like PUT. This allows reading
  the raw POST data in multipart requests and reading/processing the POST data
  in a stream fashion (through php://input) without having it copied in memory
  multiple times.

110
- Added windows_show_crt_warning. This directive shows the CRT warnings when
111 112
  enabled. These warnings were displayed by default until now. It is disabled
  by default.
113

114
- Added cli.pager to set a pager for CLI interactive shell output.
115

116 117 118 119 120 121 122 123 124 125 126 127 128 129
- Added cli.prompt to configure the CLI interactive shell prompt.

- Added cli_server.color to enable the CLI web server to use ANSI color coding
  in terminal output.

========================================
2. Changes to reserved words and classes
========================================

- "callable", "insteadof" and "trait" are now reserved words.

=============================
3. Changes to engine behavior
=============================
130

131 132
- The __construct arguments of an extended abstract constructor must
  now match:
133

134 135 136 137 138 139 140 141
  abstract class Base
  {
    abstract public function __construct();
  }
  class Foo extends Base
  {
    public function __construct($bar) {}
  }
142

143
  This now emits a Fatal error due the incompatible declaration.
144

145 146 147 148
- In previous versions, superglobal names could be used for parameter
  names, thereby shadowing the corresponding superglobal. In PHP 5.4
  this now causes a fatal error such as "Cannot re-assign auto-global
  variable GLOBALS".
149

150 151
- Turning null, false or an empty string into an object by adding a
  property will now emit a warning instead of an E_STRICT error.
152

153 154
  $test = null;
  $test->baz = 1;
155

156
  To create a generic object you can use StdClass:
157

158 159
  $test = new StdClass;
  $test->baz = 1;
160

161
- Converting an array to a string now will cause an E_NOTICE warning.
162

163 164
- Non-numeric string offsets, e.g. $a['foo'] where $a is a string, now
  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 169 170
  Note that offsets like '12.3' and '5 and a half' are considered
  non-numeric and produce warning, but are converted to 12 and 5
  respectively for backwards compatibility reasons.
171

172 173 174 175
- Long numeric strings that do not fit in integer or double (such as
  "92233720368547758070") are compared using string comparison if 
  they could otherwise result in precision loss - since 5.4.4.

176 177
- Closures now support scopes and $this and can be rebound to
  objects using Closure::bind() and Closure::bindTo().
178

179 180
- <?= is now always available regardless of the short_open_tag
  setting.
181

182 183
- Parse error messages are changed to contain more information about
  the error.
184

185 186 187
- __clone and __destruct since 5.4.4 follow the same scoping rules as 
  the rest of the methods (see bug #61782 for details).

188 189 190
================================
4. Changes to existing functions
================================
191

192 193
- array_combine now returns array() instead of FALSE when two empty arrays are
  provided as parameters.
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209

- dns_get_record() has an extra parameter which allows requesting DNS records
  by numeric type and makes the result include only the raw data of the
  response.

- call_user_func_array() no longer allows call-time pass by reference.

- the default character set for htmlspecialchars() and htmlentities() is
  now UTF-8. In previous versions it was ISO-8859-1. Note that changing
  your output charset via the php.ini default_charset directive does not
  affect htmlspecialchars/htmlentities unless you are passing "" (an 
  empty string) as the encoding parameter to your htmlspecialchars/htmlentities
  calls. 

- htmlentities() and htmlspecialchars() are stricter in the code units they
  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 212 213 214 215
  rejected. For SJIS, the octets 0x80, 0xA0, 0xFD, 0xFE and 0xFF are rejected,
  except maybe after a valid starting byte. For EUC-JP, the octets 0xA0 and
  0xFF are rejected.

- htmlentities() now emits an E_STRICT warning when used with asian characters,
216 217
  as in that case htmlentities has (and already had before this version) the
  same functionality as htmlspecialchars.
218 219

- htmlentities() no longer numerically encodes high characters for single-byte
220 221
  encodings (except when there's actually a corresponding named entity). This
  behavior was not documented and was inconsistent with that for "UTF-8".
222 223 224 225 226 227 228 229 230 231 232 233 234 235

- html_entity_decode() and htmlspecialchars_decode() behave more consistently,
  now decoding entities in malformed strings such as "&&amp;" or "&#&amp;".

- htmlentities(), htmlspecialchars(), html_entity_decode(), and
  htmlspecialchars_decode: Added the flags ENT_HTML401, ENT_XML1, ENT_XHTML,
  and ENT_HTML5. The behavior of these functions including, but not limited to,
  the characters that are encoded and the entities that are decoded depend on
  the document type that is specified by those flags.

- htmlentities() and htmlspecialchars() with !$double_encode do more strict
  checks on the validity of the entities. Numerical entities are checked for a
  valid range (0 to 0x10FFFF); if the flag ENT_DISALLOWED is given, the
  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 238 239
  document type instead of only checking whether they were constituted by
  alphanumeric characters.

240
- The flag ENT_DISALLOWED was added. In addition to the behavior described in
241 242 243 244
  the item before, it also makes htmlentities() and htmlspecialchars()
  substitute characters that appear literally in the argument string and which
  are not allowed in the target document type with U+FFFD (UTF-8) or &#xFFFD;.

245
- The flag ENT_SUBSTITUTE was added. This flag makes invalid multibyte
246 247
  sequences be replaced by U+FFFD (UTF-8) or &#FFFD; by htmlspecialchars() and
  htmlentities(). It is an alternative to the default behavior, which just
248 249
  returns an empty string and to ENT_IGNORE, which is a security risk. The
  behavior follows the recommendations of Unicode Technical Report #36.
250 251 252 253

- htmlspecialchars_decode() and html_entity_decode() now decode &apos; if the
  document type is ENT_XML1, ENT_XHTML, or ENT_HTML5.

254 255
- Charset detection with $charset == '' no longer turns to mbstring's
  internal encoding defined through mb_internal_encoding(). Only the encoding
256 257
  defined through the php.ini setting mbstring.internal_encoding is considered.

258 259
- number_format() no longer truncates multibyte decimal points and thousand
  separators to the first byte.
260

261 262 263
- The third parameter ($matches) to preg_match_all() is now optional. If
  omitted, the function will simply return the number of times the pattern was
  matched in the subject and will have no other side effects.
264

265 266 267 268
- The second argument of scandir() now accepts SCANDIR_SORT_NONE (2) as a
  possible value. This value results in scandir() performing no sorting: on
  local filesystems, this allows files to be returned in native filesystem
  order.
269

270 271 272 273
- stream_select() now preserves the keys of the passed array, be they numeric or
  strings. This breaks code that iterated the resulting stream array using a
  numeric index, but makes easier to identify which of the passed streams are
  present in the result.
274

275 276
- stream_set_write_buffer() no longer disables the read buffer of a plain
  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 281
- fclose() closes streams with resource refcount > 1; it doesn't merely
  decrement the resource refcount.
282

283
- socket_set_options() and socket_get_options() now support multicast options.
284 285 286 287 288

- The raw data parameter in openssl_encrypt() and openssl_decrypt() is now an
  options integer rather than a boolean. A value of true produces the same
  behavior.

289 290 291
- Write operations within XSLT (for example with the extension sax:output) are
  disabled by default. You can define what is forbidden with the method
  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 298

- Added no-padding option to openssl_encrypt() and openssl_decrypt().

299 300
- Added a "no_ticket" SSL context option to disable the SessionTicket TLS
  extension.
301

302 303
- Added new json_encode() options: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES,
  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 308
- Added support for CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE
  to cURL.
309

310 311
- Added optional argument to debug_backtrace() and debug_print_backtrace()
  to limit the amount of stack frames returned.
312

313 314
- Fixed crypt_blowfish handling of 8-bit characters. crypt() in Blowfish mode
  now supports hashes marked $2a$, $2x$, $2y$ and $2z$.
315

316 317 318
- mbstring now supports following encodings: Shift_JIS/UTF-8 Emoji,
  JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004),
  MacJapanese (Shift_JIS), gb18030.
319 320 321 322 323 324 325

- Added encode and decode in hex format to mb_encode_numericentity() and
  mb_decode_numericentity().

- Added support for SORT_NATURAL and SORT_FLAG_CASE in array sort functions:
  sort(), rsort(), ksort(), krsort(), asort(), arsort() and array_multisort().

326 327 328
- is_a() and is_subclass_of() now have third boolean parameter, which specifies
  if the first argument can be a string class name. Default if false for is_a
  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 332
  the previous special case behavior of treating it as 4096 bytes.

333 334 335
- idn_to_ascii() and idn_to_utf8() now take two extra parameters, one indicating
  the variant (IDNA 2003 or UTS #46) and another, passed by reference, to return
  details about the operation in case UTS #46 is chosen.
336

337
- gzencode() used with FORCE_DEFLATE now generates RFC1950 compliant data.
338

339 340
- ob_start() no longer starts multiple output buffers when passed
  array("callback1", "callback2", "callback3", ...).
341

342 343
- Since 5.4.4, "php://fd" stream syntax is available only in CLI build.

344 345
- Since 5.4.5, resourcebundle_create() accepts null for the first two arguments.

346 347 348
==============================
5. Changes to existing classes
==============================
349

350 351 352 353
- Classes that implement stream wrappers can define a method called
  stream_truncate that will respond to truncation, e.g. through ftruncate.
  Strictly speaking, this is an addition to the user-space stream wrapper
  template, not a change to an actual class.
354 355 356 357

- Classes that implement stream wrappers can define a method called
  stream_metadata that will be called on touch(), chmod(), chgrp(), chown().

358 359
- Arrays cast from SimpleXMLElement now always contain all nodes instead of
  just the first matching node.
360

361 362
- All SimpleXMLElement children are now always printed when using var_dump(),
  var_export(), and print_r().
363

364
- Added iterator support in MySQLi. mysqli_result implements Traversable.
365

366 367 368
==============================
6. Changes to existing methods
==============================
369

370 371
- DateTime::parseFromFormat() now has a "+" modifier to allow trailing text in
  the string to parse without throwing an error.
372

373
- Added the ability to pass options to DOMDocument::loadHTML().
374

375 376 377
- FilesystemIterator, GlobIterator and (Recursive)DirectoryIterator now use
  the default stream context.

378 379 380
- Since 5.4.5, the constructor of ResourceBundle accepts NULL for the first two
  arguments.

381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
===========================
7. Deprecated Functionality
===========================

- The following functions are deprecated in PHP 5.4:
  - mcrypt_generic_end():       use mcrypt_generic_deinit() instead
  - mysql_list_dbs()

========================
8. Removed Functionality
========================

a. Removed features

   The following features have been removed from PHP 5.4:

   - Magic quotes
   - Register globals
   - Safe mode
   - Session extension bug compatibility mode
   - Y2K compliance mode

b. Removed functions

   The following functions are no longer available in PHP 5.4:

   - define_syslog_variables()
   - import_request_variables()
   - session_is_registered()
   - session_register()
   - session_unregister()
   - set_magic_quotes_runtime()
   - mysqli_bind_param() (alias of mysqli_stmt_bind_param())
   - mysqli_bind_result() (alias of mysqli_stmt_bind_result())
   - mysqli_client_encoding() (alias of mysqli_character_set_name())
   - mysqli_fetch() (alias of mysqli_stmt_fetch())
   - mysqli_param_count() (alias of mysqli_stmt_param_count())
   - mysqli_get_metadata() (alias of mysqli_stmt_result_metadata())
   - mysqli_send_long_data() (alias of mysqli_stmt_send_long_data())
   - mysqli::client_encoding() (alias of mysqli::character_set_name)
   - mysqli_stmt::stmt() (never worked/always throws, undocumented)

c. Removed syntax

   - break $var;
   - continue $var;

d. Removed hash algorithms

   - Salsa10 and Salsa20, which are actually stream ciphers
431

432
====================
433
9. Extension Changes
434
====================
435

436 437 438
a. Extensions no longer maintained

   - ext/sqlite is no longer part of the base distribution and has been moved
439
     to PECL. Use sqlite3 or PDO_SQLITE instead.
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490

b. Extensions with changed behavior

   - The MySQL extensions (ext/mysql, mysqli and PDO_MYSQL) use mysqlnd
     as the default library now. It is still possible to use libmysql by
     specifying a path to the configure options.

   - PDO_MYSQL: Support for linking with MySQL client libraries older
     than 4.1 is removed.

   - The session extension now can hook into the file upload feature
     in order to provide upload progress information through session
     variables.

   - SNMP extension
     - Functions in SNMP extension now returns FALSE on every error
       condition including SNMP-related (no such instance, end of MIB,
       etc). Thus, in patricular, breaks previous behavior of get/walk
       functions returning an empty string on SNMP-related errors.
     - Multi OID get/getnext/set queries are now supported.
     - New constants added for use in snmp_set_oid_output_format()
       function.
     - Function snmp_set_valueretrieval() changed it's behavior:
	    SNMP_VALUE_OBJECT can be combined with one of
	    SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY resulting OID value
	    changes. When no SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY
	    is supplied with SNMP_VALUE_OBJECT, SNMP_VALUE_LIBRARY is used.
	    Prior to 5.4.0 when no SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY
	    was supplied with SNMP_VALUE_OBJECT, SNMP_VALUE_PLAIN was used.
     - Added feature-rich OO API (SNMP class)
     - Dropped UCD-SNMP compatibility code. Consider upgrading to
       net-snmp v5.3+. Net-SNMP v5.4+ is required for Windows version.
     - In sake of adding support for IPv6 DNS name resolution of
       remote SNMP agent (peer) is done by extension now, not by Net-SNMP
       library anymore.

   - Date extension
     - Setting the timezone with the TZ environment variable is no longer
       supported, instead date.timezone and/or date_default_timezone_set()
       have to be used.
     - The extension will no longer guess the default timezone if none
       is set with date.timezone and/or date_default_timezone_set().
       Instead it will always fall back to "UTC".

   - Hash extension
     - the output of the tiger hash family has been corrected, see
       https://bugs.php.net/61307

===========================
10. Changes in SAPI support
===========================
491

492
- A REQUEST_TIME_FLOAT value returns a floating point number indicating the
493
  time with microsecond precision. All SAPIs providing this value should be
494
  returning float and not time_t.
495

496 497
- apache_child_terminate(), getallheaders(), apache_request_headers()
  and apache_response_headers() are now supported on FastCGI.
498

499 500
- The interactive shell allows a shortcut #inisetting=value to change php.ini
  settings at run-time.
501

502
- The interactive shell now works with the shared readline extension.
503

504
- The interactive shell no longer terminates on fatal errors.
505

506 507 508 509 510 511 512 513 514
- A new PHP CLI command line option --rz <name> shows information about the
  named Zend extension.

===================
11. Windows support
===================

- is_link now works properly for symbolic links on Windows Vista
  or later. Earlier systems do not support symbolic links.
515

516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617
==================
12. New in PHP 5.4
==================

a. New Features

  - A built-in CLI web server for testing purposes is now available:
     $ php -S 127.0.0.1:8888

  - File Upload Progress support is implemented in the Session extension.

b. Syntax additions

  - Traits:
      trait HelloWorld {
	  public function sayHello() {
	      echo 'Hello World!';
	  }
      }

      class CanIGetHello {
	  use HelloWorld;
      }

      $hello = new CanIGetHello();
      $hello->sayHello();

  - Function call result array access, e.g.:
      foo()[0]
      $foo->bar()[0]

  - Callable typehint indicating argument must be callable:
      function foo(callable $do) {
      }
      foo("strcmp");
      foo(function() {});
      $o = new ArrayObject();
      foo(array($o, "count"));

  - Short array syntax:
      $a = [1, 2, 3, 4];
      $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
      $a = ['one' => 1, 2, 'three' => 3, 4];

  - Binary number format:
      0b00100 0b010101

  - Chained string array offsets now work.
      $a = "abc";
      echo $a[0][0];

  - Anonymous functions now support using $this and class scope.
    Anonymous function can be declared as "static" to ignore the scope.

  - Class::{expr}() syntax is now supported:
      class A {
	  static function foo() {
	      echo "Hello world!\n";
	  }
      }
      $x = "f";
      $y = "o";
      A::{$x.$y.$y}();

  - Class member access on instantiation:
      (new foo)->method()
      (new foo)->property
      (new foo)[0]


c. New functions

  - Core:
    - get_declared_traits()
    - getimagesizefromstring()
    - hex2bin()
    - header_register_callback()
    - http_response_code()
    - stream_set_chunk_size()
    - socket_import_stream()
    - trait_exists()

  - Intl:
    - transliterator_create()
    - transliterator_create_from_rules()
    - transliterator_create_inverse()
    - transliterator_get_error_code()
    - transliterator_get_error_message()
    - transliterator_list_ids()
    - transliterator_transliterate()

  - LDAP:
    - ldap_control_paged_result()
    - ldap_control_paged_result_response()

  - libxml:
    - libxml_set_external_entity_loader()

  - mysqli:
    - mysqli_error_list()
    - mysqli_stmt_error_list()

618 619 620 621
  - pgsql
    - pg_escape_identifier() (5.4.4)
    - pg_escape_literal() (5.4.4)

622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803
  - Session:
    - session_register_shutdown()
    - session_status()

  - SPL
    - class_uses()

d. New global constants

  - CURLOPT_MAX_RECV_SPEED_LARGE
  - CURLOPT_MAX_SEND_SPEED_LARGE
  - ENT_DISALLOWED
  - ENT_HTML401
  - ENT_HTML5
  - ENT_SUBSTITUTE
  - ENT_XHTML
  - ENT_XML1
  - IPPROTO_IP
  - IPPROTO_IPV6
  - IPV6_MULTICAST_HOPS
  - IPV6_MULTICAST_IF
  - IPV6_MULTICAST_LOOP
  - IP_MULTICAST_IF
  - IP_MULTICAST_LOOP
  - IP_MULTICAST_TTL
  - JSON_BIGINT_AS_STRING
  - JSON_OBJECT_AS_ARRAY
  - JSON_PRETTY_PRINT
  - JSON_UNESCAPED_SLASHES
  - JSON_UNESCAPED_UNICODE
  - LIBXML_HTML_NODEFDTD
  - LIBXML_HTML_NOIMPLIED
  - LIBXML_PEDANTIC
  - MCAST_JOIN_GROUP
  - MCAST_LEAVE_GROUP
  - MCAST_BLOCK_SOURCE
  - MCAST_UNBLOCK_SOURCE
  - MCAST_JOIN_SOURCE_GROUP
  - MCAST_LEAVE_SOURCE_GROUP
  - OPENSSL_CIPHER_AES_128_CBC
  - OPENSSL_CIPHER_AES_192_CBC
  - OPENSSL_CIPHER_AES_256_CBC
  - OPENSSL_RAW_DATA
  - OPENSSL_ZERO_PADDING
  - PHP_OUTPUT_HANDLER_CLEAN
  - PHP_OUTPUT_HANDLER_CLEANABLE
  - PHP_OUTPUT_HANDLER_DISABLED
  - PHP_OUTPUT_HANDLER_FINAL
  - PHP_OUTPUT_HANDLER_FLUSH
  - PHP_OUTPUT_HANDLER_FLUSHABLE
  - PHP_OUTPUT_HANDLER_REMOVABLE
  - PHP_OUTPUT_HANDLER_STARTED
  - PHP_OUTPUT_HANDLER_STDFLAGS
  - PHP_OUTPUT_HANDLER_WRITE
  - PHP_QUERY_RFC1738
  - PHP_QUERY_RFC3986
  - PHP_SESSION_ACTIVE
  - PHP_SESSION_DISABLED
  - PHP_SESSION_NONE
  - SCANDIR_SORT_ASCENDING
  - SCANDIR_SORT_DESCENDING
  - SCANDIR_SORT_NONE
  - SORT_FLAG_CASE
  - SORT_NATURAL
  - STREAM_META_ACCESS
  - STREAM_META_GROUP
  - STREAM_META_GROUP_NAME
  - STREAM_META_OWNER
  - STREAM_META_OWNER_NAME
  - STREAM_META_TOUCH
  - T_CALLABLE
  - T_INSTEADOF
  - T_TRAIT
  - T_TRAIT_C
  - ZLIB_ENCODING_DEFLATE
  - ZLIB_ENCODING_GZIP
  - ZLIB_ENCODING_RAW
  - U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
  - IDNA_CHECK_BIDI
  - IDNA_CHECK_CONTEXTJ
  - IDNA_NONTRANSITIONAL_TO_ASCII
  - IDNA_NONTRANSITIONAL_TO_UNICODE
  - INTL_IDNA_VARIANT_2003
  - INTL_IDNA_VARIANT_UTS46
  - IDNA_ERROR_EMPTY_LABEL
  - IDNA_ERROR_LABEL_TOO_LONG
  - IDNA_ERROR_DOMAIN_NAME_TOO_LONG
  - IDNA_ERROR_LEADING_HYPHEN
  - IDNA_ERROR_TRAILING_HYPHEN
  - IDNA_ERROR_HYPHEN_3_4
  - IDNA_ERROR_LEADING_COMBINING_MARK
  - IDNA_ERROR_DISALLOWED
  - IDNA_ERROR_PUNYCODE
  - IDNA_ERROR_LABEL_HAS_DOT
  - IDNA_ERROR_INVALID_ACE_LABEL
  - IDNA_ERROR_BIDI
  - IDNA_ERROR_CONTEXTJ

e. New classes

  - Reflection:
    - ReflectionZendExtension

  - Intl:
    - Transliterator
    - Spoofchecker

  - JSON:
    - JsonSerializable

  - Session:
    - SessionHandler

  - SNMP:
    - SNMP

  - SPL:
    - CallbackFilterIterator
    - RecursiveCallbackFilterIterator

f. New methods

  - Closure:
    - Closure::bind()
    - Closure::bindTo()

  - Reflection:
    - ReflectionClass::getTraitAliases()
    - ReflectionClass::getTraitNames()
    - ReflectionClass::getTraits()
    - ReflectionClass::isCloneable()
    - ReflectionClass::isTrait()
    - ReflectionClass::newInstanceWithoutConstructor()
    - ReflectionExtension::isPersistent()
    - ReflectionExtension::isTemporary()
    - ReflectionFunction::getClosure()
    - ReflectionFunction::getClosureScopeClass()
    - ReflectionFunction::getClosureThis()
    - ReflectionFunctionAbstract::getClosureScopeClass()
    - ReflectionFunctionAbstract::getClosureThis()
    - ReflectionMethod::getClosure()
    - ReflectionMethod::getClosureScopeClass()
    - ReflectionMethod::getClosureThis()
    - ReflectionObject::getTraitAliases()
    - ReflectionObject::getTraitNames()
    - ReflectionObject::getTraits()
    - ReflectionObject::isCloneable()
    - ReflectionObject::isTrait()
    - ReflectionObject::newInstanceWithoutConstructor()
    - ReflectionParameter::canBePassedByValue()
    - ReflectionParameter::isCallable()

  - PDO_DBLIB:
    - PDO::newRowset()

  - SPL:
    - DirectoryIterator::getExtension()
    - RegexIterator::getRegex()
    - SplDoublyLinkedList::serialize()
    - SplDoublyLinkedList::unserialize()
    - SplFileInfo::getExtension()
    - SplFileObject::fputcsv()
    - SplObjectStorage::getHash()
    - SplQueue::serialize
    - SplQueue::unserialize
    - SplStack::serialize
    - SplStack::unserialize
    - SplTempFileObject::fputcsv

  - XSLT:
    - XsltProcessor::setSecurityPrefs()
    - XsltProcessor::getSecurityPrefs()

  - Zlib:
    - zlib_decode()
    - zlib_encode()

g. New Hash algorithms

  - fnv132
  - fnv164
  - joaat