Annotation of embedaddon/php/UPGRADING, revision 1.1.1.2
1.1.1.2 ! misho 1: $Id$
1.1 misho 2:
1.1.1.2 ! misho 3: PHP 5.4 UPGRADE NOTES
1.1 misho 4:
1.1.1.2 ! misho 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
1.1 misho 25: 11. Windows support
1.1.1.2 ! misho 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
1.1 misho 34:
35: =============================
1.1.1.2 ! misho 36: 1. Changes to INI directives
1.1 misho 37: =============================
38:
1.1.1.2 ! misho 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: ========================================
1.1 misho 124:
1.1.1.2 ! misho 125: - "callable", "insteadof" and "trait" are now reserved words.
1.1 misho 126:
1.1.1.2 ! misho 127: =============================
! 128: 3. Changes to engine behavior
! 129: =============================
1.1 misho 130:
1.1.1.2 ! misho 131: - The __construct arguments of an extended abstract constructor must
! 132: now match:
1.1 misho 133:
1.1.1.2 ! misho 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: - Closures now support scopes and $this and can be rebound to
! 173: objects using Closure::bind() and Closure::bindTo().
! 174:
! 175: - <?= is now always available regardless of the short_open_tag
! 176: setting.
! 177:
! 178: - Parse error messages are changed to contain more information about
! 179: the error.
! 180:
! 181: ================================
! 182: 4. Changes to existing functions
! 183: ================================
! 184:
! 185: - array_combine now returns array() instead of FALSE when two empty arrays are
! 186: provided as parameters.
! 187:
! 188: - dns_get_record() has an extra parameter which allows requesting DNS records
! 189: by numeric type and makes the result include only the raw data of the
! 190: response.
! 191:
! 192: - call_user_func_array() no longer allows call-time pass by reference.
! 193:
! 194: - the default character set for htmlspecialchars() and htmlentities() is
! 195: now UTF-8. In previous versions it was ISO-8859-1. Note that changing
! 196: your output charset via the php.ini default_charset directive does not
! 197: affect htmlspecialchars/htmlentities unless you are passing "" (an
! 198: empty string) as the encoding parameter to your htmlspecialchars/htmlentities
! 199: calls.
! 200:
! 201: - htmlentities() and htmlspecialchars() are stricter in the code units they
! 202: accept for the asian encodings. For Big5-HKSCS, the octets 0x80 and 0xFF are
! 203: rejected. For GB2312/EUC-CN, the octets 0x8E, 0x8F, 0xA0 and 0xFF are
! 204: rejected. For SJIS, the octets 0x80, 0xA0, 0xFD, 0xFE and 0xFF are rejected,
! 205: except maybe after a valid starting byte. For EUC-JP, the octets 0xA0 and
! 206: 0xFF are rejected.
! 207:
! 208: - htmlentities() now emits an E_STRICT warning when used with asian characters,
! 209: as in that case htmlentities has (and already had before this version) the
! 210: same functionality as htmlspecialchars.
! 211:
! 212: - htmlentities() no longer numerically encodes high characters for single-byte
! 213: encodings (except when there's actually a corresponding named entity). This
! 214: behavior was not documented and was inconsistent with that for "UTF-8".
! 215:
! 216: - html_entity_decode() and htmlspecialchars_decode() behave more consistently,
! 217: now decoding entities in malformed strings such as "&&" or "&#&".
! 218:
! 219: - htmlentities(), htmlspecialchars(), html_entity_decode(), and
! 220: htmlspecialchars_decode: Added the flags ENT_HTML401, ENT_XML1, ENT_XHTML,
! 221: and ENT_HTML5. The behavior of these functions including, but not limited to,
! 222: the characters that are encoded and the entities that are decoded depend on
! 223: the document type that is specified by those flags.
! 224:
! 225: - htmlentities() and htmlspecialchars() with !$double_encode do more strict
! 226: checks on the validity of the entities. Numerical entities are checked for a
! 227: valid range (0 to 0x10FFFF); if the flag ENT_DISALLOWED is given, the
! 228: validity of such numerical entity in the target document type is also
! 229: checked. Named entities are checked for necessary existence in the target
! 230: document type instead of only checking whether they were constituted by
! 231: alphanumeric characters.
! 232:
! 233: - The flag ENT_DISALLOWED was added. In addition to the behavior described in
! 234: the item before, it also makes htmlentities() and htmlspecialchars()
! 235: substitute characters that appear literally in the argument string and which
! 236: are not allowed in the target document type with U+FFFD (UTF-8) or �.
! 237:
! 238: - The flag ENT_SUBSTITUTE was added. This flag makes invalid multibyte
! 239: sequences be replaced by U+FFFD (UTF-8) or &#FFFD; by htmlspecialchars() and
! 240: htmlentities(). It is an alternative to the default behavior, which just
! 241: returns an empty string and to ENT_IGNORE, which is a security risk. The
! 242: behavior follows the recommendations of Unicode Technical Report #36.
! 243:
! 244: - htmlspecialchars_decode() and html_entity_decode() now decode ' if the
! 245: document type is ENT_XML1, ENT_XHTML, or ENT_HTML5.
! 246:
! 247: - Charset detection with $charset == '' no longer turns to mbstring's
! 248: internal encoding defined through mb_internal_encoding(). Only the encoding
! 249: defined through the php.ini setting mbstring.internal_encoding is considered.
! 250:
! 251: - number_format() no longer truncates multibyte decimal points and thousand
! 252: separators to the first byte.
! 253:
! 254: - The third parameter ($matches) to preg_match_all() is now optional. If
! 255: omitted, the function will simply return the number of times the pattern was
! 256: matched in the subject and will have no other side effects.
! 257:
! 258: - The second argument of scandir() now accepts SCANDIR_SORT_NONE (2) as a
! 259: possible value. This value results in scandir() performing no sorting: on
! 260: local filesystems, this allows files to be returned in native filesystem
! 261: order.
! 262:
! 263: - stream_select() now preserves the keys of the passed array, be they numeric or
! 264: strings. This breaks code that iterated the resulting stream array using a
! 265: numeric index, but makes easier to identify which of the passed streams are
! 266: present in the result.
! 267:
! 268: - stream_set_write_buffer() no longer disables the read buffer of a plain
! 269: stream when 0 is given as the second argument.
! 270:
! 271: - stream_set_write_buffer() no longer changes the chunk size in socket streams.
! 272:
! 273: - fclose() closes streams with resource refcount > 1; it doesn't merely
! 274: decrement the resource refcount.
! 275:
! 276: - socket_set_options() and socket_get_options() now support multicast options.
! 277:
! 278: - The raw data parameter in openssl_encrypt() and openssl_decrypt() is now an
! 279: options integer rather than a boolean. A value of true produces the same
! 280: behavior.
1.1 misho 281:
282: - Write operations within XSLT (for example with the extension sax:output) are
1.1.1.2 ! misho 283: disabled by default. You can define what is forbidden with the method
! 284: XsltProcess::setSecurityPrefs($options).
1.1 misho 285:
1.1.1.2 ! misho 286: - Added AES support to OpenSSL.
1.1 misho 287:
1.1.1.2 ! misho 288: - openssl_csr_new() expects the textual data to be in UTF-8.
1.1 misho 289:
1.1.1.2 ! misho 290: - Added no-padding option to openssl_encrypt() and openssl_decrypt().
1.1 misho 291:
1.1.1.2 ! misho 292: - Added a "no_ticket" SSL context option to disable the SessionTicket TLS
! 293: extension.
1.1 misho 294:
1.1.1.2 ! misho 295: - Added new json_encode() options: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES,
! 296: JSON_NUMERIC_CHECK, JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE.
1.1 misho 297:
1.1.1.2 ! misho 298: - Added Tokyo Cabinet and Berkley DB 5 support to DBA extension.
1.1 misho 299:
1.1.1.2 ! misho 300: - Added support for CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE
! 301: to cURL.
1.1 misho 302:
1.1.1.2 ! misho 303: - Added optional argument to debug_backtrace() and debug_print_backtrace()
! 304: to limit the amount of stack frames returned.
1.1 misho 305:
1.1.1.2 ! misho 306: - Fixed crypt_blowfish handling of 8-bit characters. crypt() in Blowfish mode
! 307: now supports hashes marked $2a$, $2x$, $2y$ and $2z$.
1.1 misho 308:
1.1.1.2 ! misho 309: - mbstring now supports following encodings: Shift_JIS/UTF-8 Emoji,
! 310: JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004),
! 311: MacJapanese (Shift_JIS), gb18030.
1.1 misho 312:
1.1.1.2 ! misho 313: - Added encode and decode in hex format to mb_encode_numericentity() and
! 314: mb_decode_numericentity().
1.1 misho 315:
1.1.1.2 ! misho 316: - Added support for SORT_NATURAL and SORT_FLAG_CASE in array sort functions:
! 317: sort(), rsort(), ksort(), krsort(), asort(), arsort() and array_multisort().
1.1 misho 318:
1.1.1.2 ! misho 319: - is_a() and is_subclass_of() now have third boolean parameter, which specifies
! 320: if the first argument can be a string class name. Default if false for is_a
! 321: and true for is_subclass_of() for BC reasons.
1.1 misho 322:
1.1.1.2 ! misho 323: - ob_start() will now treat a chunk size of 1 as meaning 1 byte, rather than
! 324: the previous special case behavior of treating it as 4096 bytes.
1.1 misho 325:
1.1.1.2 ! misho 326: - idn_to_ascii() and idn_to_utf8() now take two extra parameters, one indicating
! 327: the variant (IDNA 2003 or UTS #46) and another, passed by reference, to return
! 328: details about the operation in case UTS #46 is chosen.
1.1 misho 329:
1.1.1.2 ! misho 330: - gzencode() used with FORCE_DEFLATE now generates RFC1950 compliant data.
1.1 misho 331:
1.1.1.2 ! misho 332: - ob_start() no longer starts multiple output buffers when passed
! 333: array("callback1", "callback2", "callback3", ...).
1.1 misho 334:
1.1.1.2 ! misho 335: ==============================
! 336: 5. Changes to existing classes
! 337: ==============================
1.1 misho 338:
1.1.1.2 ! misho 339: - Classes that implement stream wrappers can define a method called
! 340: stream_truncate that will respond to truncation, e.g. through ftruncate.
! 341: Strictly speaking, this is an addition to the user-space stream wrapper
! 342: template, not a change to an actual class.
1.1 misho 343:
1.1.1.2 ! misho 344: - Classes that implement stream wrappers can define a method called
! 345: stream_metadata that will be called on touch(), chmod(), chgrp(), chown().
1.1 misho 346:
1.1.1.2 ! misho 347: - Arrays cast from SimpleXMLElement now always contain all nodes instead of
! 348: just the first matching node.
1.1 misho 349:
1.1.1.2 ! misho 350: - All SimpleXMLElement children are now always printed when using var_dump(),
! 351: var_export(), and print_r().
1.1 misho 352:
1.1.1.2 ! misho 353: - Added iterator support in MySQLi. mysqli_result implements Traversable.
1.1 misho 354:
1.1.1.2 ! misho 355: ==============================
! 356: 6. Changes to existing methods
! 357: ==============================
1.1 misho 358:
1.1.1.2 ! misho 359: - DateTime::parseFromFormat() now has a "+" modifier to allow trailing text in
! 360: the string to parse without throwing an error.
1.1 misho 361:
1.1.1.2 ! misho 362: - Added the ability to pass options to DOMDocument::loadHTML().
1.1 misho 363:
1.1.1.2 ! misho 364: - FilesystemIterator, GlobIterator and (Recursive)DirectoryIterator now use
! 365: the default stream context.
1.1 misho 366:
1.1.1.2 ! misho 367: ===========================
! 368: 7. Deprecated Functionality
! 369: ===========================
1.1 misho 370:
1.1.1.2 ! misho 371: - The following functions are deprecated in PHP 5.4:
! 372: - mcrypt_generic_end(): use mcrypt_generic_deinit() instead
! 373: - mysql_list_dbs()
1.1 misho 374:
1.1.1.2 ! misho 375: ========================
! 376: 8. Removed Functionality
! 377: ========================
1.1 misho 378:
1.1.1.2 ! misho 379: a. Removed features
1.1 misho 380:
1.1.1.2 ! misho 381: The following features have been removed from PHP 5.4:
1.1 misho 382:
1.1.1.2 ! misho 383: - Magic quotes
! 384: - Register globals
! 385: - Safe mode
! 386: - Session extension bug compatibility mode
! 387: - Y2K compliance mode
1.1 misho 388:
1.1.1.2 ! misho 389: b. Removed functions
1.1 misho 390:
1.1.1.2 ! misho 391: The following functions are no longer available in PHP 5.4:
1.1 misho 392:
1.1.1.2 ! misho 393: - define_syslog_variables()
! 394: - import_request_variables()
! 395: - session_is_registered()
! 396: - session_register()
! 397: - session_unregister()
! 398: - set_magic_quotes_runtime()
! 399: - mysqli_bind_param() (alias of mysqli_stmt_bind_param())
! 400: - mysqli_bind_result() (alias of mysqli_stmt_bind_result())
! 401: - mysqli_client_encoding() (alias of mysqli_character_set_name())
! 402: - mysqli_fetch() (alias of mysqli_stmt_fetch())
! 403: - mysqli_param_count() (alias of mysqli_stmt_param_count())
! 404: - mysqli_get_metadata() (alias of mysqli_stmt_result_metadata())
! 405: - mysqli_send_long_data() (alias of mysqli_stmt_send_long_data())
! 406: - mysqli::client_encoding() (alias of mysqli::character_set_name)
! 407: - mysqli_stmt::stmt() (never worked/always throws, undocumented)
1.1 misho 408:
1.1.1.2 ! misho 409: c. Removed syntax
1.1 misho 410:
1.1.1.2 ! misho 411: - break $var;
! 412: - continue $var;
1.1 misho 413:
1.1.1.2 ! misho 414: d. Removed hash algorithms
1.1 misho 415:
1.1.1.2 ! misho 416: - Salsa10 and Salsa20, which are actually stream ciphers
1.1 misho 417:
418: ====================
1.1.1.2 ! misho 419: 9. Extension Changes
1.1 misho 420: ====================
421:
1.1.1.2 ! misho 422: a. Extensions no longer maintained
1.1 misho 423:
1.1.1.2 ! misho 424: - ext/sqlite is no longer part of the base distribution and has been moved
! 425: to PECL. Use sqlite3 or PDO_SQLITE instead.
1.1 misho 426:
1.1.1.2 ! misho 427: b. Extensions with changed behavior
1.1 misho 428:
1.1.1.2 ! misho 429: - The MySQL extensions (ext/mysql, mysqli and PDO_MYSQL) use mysqlnd
! 430: as the default library now. It is still possible to use libmysql by
! 431: specifying a path to the configure options.
! 432:
! 433: - PDO_MYSQL: Support for linking with MySQL client libraries older
! 434: than 4.1 is removed.
! 435:
! 436: - The session extension now can hook into the file upload feature
! 437: in order to provide upload progress information through session
! 438: variables.
! 439:
! 440: - SNMP extension
! 441: - Functions in SNMP extension now returns FALSE on every error
! 442: condition including SNMP-related (no such instance, end of MIB,
! 443: etc). Thus, in patricular, breaks previous behavior of get/walk
! 444: functions returning an empty string on SNMP-related errors.
! 445: - Multi OID get/getnext/set queries are now supported.
! 446: - New constants added for use in snmp_set_oid_output_format()
! 447: function.
! 448: - Function snmp_set_valueretrieval() changed it's behavior:
! 449: SNMP_VALUE_OBJECT can be combined with one of
! 450: SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY resulting OID value
! 451: changes. When no SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY
! 452: is supplied with SNMP_VALUE_OBJECT, SNMP_VALUE_LIBRARY is used.
! 453: Prior to 5.4.0 when no SNMP_VALUE_PLAIN or SNMP_VALUE_LIBRARY
! 454: was supplied with SNMP_VALUE_OBJECT, SNMP_VALUE_PLAIN was used.
! 455: - Added feature-rich OO API (SNMP class)
! 456: - Dropped UCD-SNMP compatibility code. Consider upgrading to
! 457: net-snmp v5.3+. Net-SNMP v5.4+ is required for Windows version.
! 458: - In sake of adding support for IPv6 DNS name resolution of
! 459: remote SNMP agent (peer) is done by extension now, not by Net-SNMP
! 460: library anymore.
! 461:
! 462: - Date extension
! 463: - Setting the timezone with the TZ environment variable is no longer
! 464: supported, instead date.timezone and/or date_default_timezone_set()
! 465: have to be used.
! 466: - The extension will no longer guess the default timezone if none
! 467: is set with date.timezone and/or date_default_timezone_set().
! 468: Instead it will always fall back to "UTC".
! 469:
! 470: - Hash extension
! 471: - the output of the tiger hash family has been corrected, see
! 472: https://bugs.php.net/61307
! 473:
! 474: ===========================
! 475: 10. Changes in SAPI support
! 476: ===========================
! 477:
! 478: - A REQUEST_TIME_FLOAT value returns a floating point number indicating the
! 479: time with microsecond precision. All SAPIs providing this value should be
! 480: returning float and not time_t.
! 481:
! 482: - apache_child_terminate(), getallheaders(), apache_request_headers()
! 483: and apache_response_headers() are now supported on FastCGI.
! 484:
! 485: - The interactive shell allows a shortcut #inisetting=value to change php.ini
! 486: settings at run-time.
1.1 misho 487:
1.1.1.2 ! misho 488: - The interactive shell now works with the shared readline extension.
1.1 misho 489:
1.1.1.2 ! misho 490: - The interactive shell no longer terminates on fatal errors.
1.1 misho 491:
1.1.1.2 ! misho 492: - A new PHP CLI command line option --rz <name> shows information about the
! 493: named Zend extension.
1.1 misho 494:
1.1.1.2 ! misho 495: ===================
! 496: 11. Windows support
! 497: ===================
1.1 misho 498:
1.1.1.2 ! misho 499: - is_link now works properly for symbolic links on Windows Vista
! 500: or later. Earlier systems do not support symbolic links.
1.1 misho 501:
1.1.1.2 ! misho 502: ==================
! 503: 12. New in PHP 5.4
! 504: ==================
1.1 misho 505:
1.1.1.2 ! misho 506: a. New Features
1.1 misho 507:
1.1.1.2 ! misho 508: - A built-in CLI web server for testing purposes is now available:
! 509: $ php -S 127.0.0.1:8888
1.1 misho 510:
1.1.1.2 ! misho 511: - File Upload Progress support is implemented in the Session extension.
1.1 misho 512:
1.1.1.2 ! misho 513: b. Syntax additions
1.1 misho 514:
1.1.1.2 ! misho 515: - Traits:
! 516: trait HelloWorld {
! 517: public function sayHello() {
! 518: echo 'Hello World!';
! 519: }
! 520: }
1.1 misho 521:
1.1.1.2 ! misho 522: class CanIGetHello {
! 523: use HelloWorld;
! 524: }
1.1 misho 525:
1.1.1.2 ! misho 526: $hello = new CanIGetHello();
! 527: $hello->sayHello();
1.1 misho 528:
1.1.1.2 ! misho 529: - Function call result array access, e.g.:
! 530: foo()[0]
! 531: $foo->bar()[0]
1.1 misho 532:
1.1.1.2 ! misho 533: - Callable typehint indicating argument must be callable:
! 534: function foo(callable $do) {
! 535: }
! 536: foo("strcmp");
! 537: foo(function() {});
! 538: $o = new ArrayObject();
! 539: foo(array($o, "count"));
! 540:
! 541: - Short array syntax:
! 542: $a = [1, 2, 3, 4];
! 543: $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
! 544: $a = ['one' => 1, 2, 'three' => 3, 4];
! 545:
! 546: - Binary number format:
! 547: 0b00100 0b010101
! 548:
! 549: - Chained string array offsets now work.
! 550: $a = "abc";
! 551: echo $a[0][0];
! 552:
! 553: - Anonymous functions now support using $this and class scope.
! 554: Anonymous function can be declared as "static" to ignore the scope.
! 555:
! 556: - Class::{expr}() syntax is now supported:
! 557: class A {
! 558: static function foo() {
! 559: echo "Hello world!\n";
! 560: }
! 561: }
! 562: $x = "f";
! 563: $y = "o";
! 564: A::{$x.$y.$y}();
! 565:
! 566: - Class member access on instantiation:
! 567: (new foo)->method()
! 568: (new foo)->property
! 569: (new foo)[0]
! 570:
! 571:
! 572: c. New functions
! 573:
! 574: - Core:
! 575: - get_declared_traits()
! 576: - getimagesizefromstring()
! 577: - hex2bin()
! 578: - header_register_callback()
! 579: - http_response_code()
! 580: - stream_set_chunk_size()
! 581: - socket_import_stream()
! 582: - trait_exists()
! 583:
! 584: - Intl:
! 585: - transliterator_create()
! 586: - transliterator_create_from_rules()
! 587: - transliterator_create_inverse()
! 588: - transliterator_get_error_code()
! 589: - transliterator_get_error_message()
! 590: - transliterator_list_ids()
! 591: - transliterator_transliterate()
! 592:
! 593: - LDAP:
! 594: - ldap_control_paged_result()
! 595: - ldap_control_paged_result_response()
! 596:
! 597: - libxml:
! 598: - libxml_set_external_entity_loader()
! 599:
! 600: - mysqli:
! 601: - mysqli_error_list()
! 602: - mysqli_stmt_error_list()
! 603:
! 604: - Session:
! 605: - session_register_shutdown()
! 606: - session_status()
! 607:
! 608: - SPL
! 609: - class_uses()
! 610:
! 611: d. New global constants
! 612:
! 613: - CURLOPT_MAX_RECV_SPEED_LARGE
! 614: - CURLOPT_MAX_SEND_SPEED_LARGE
! 615: - ENT_DISALLOWED
! 616: - ENT_HTML401
! 617: - ENT_HTML5
! 618: - ENT_SUBSTITUTE
! 619: - ENT_XHTML
! 620: - ENT_XML1
! 621: - IPPROTO_IP
! 622: - IPPROTO_IPV6
! 623: - IPV6_MULTICAST_HOPS
! 624: - IPV6_MULTICAST_IF
! 625: - IPV6_MULTICAST_LOOP
! 626: - IP_MULTICAST_IF
! 627: - IP_MULTICAST_LOOP
! 628: - IP_MULTICAST_TTL
! 629: - JSON_BIGINT_AS_STRING
! 630: - JSON_OBJECT_AS_ARRAY
! 631: - JSON_PRETTY_PRINT
! 632: - JSON_UNESCAPED_SLASHES
! 633: - JSON_UNESCAPED_UNICODE
! 634: - LIBXML_HTML_NODEFDTD
! 635: - LIBXML_HTML_NOIMPLIED
! 636: - LIBXML_PEDANTIC
! 637: - MCAST_JOIN_GROUP
! 638: - MCAST_LEAVE_GROUP
! 639: - MCAST_BLOCK_SOURCE
! 640: - MCAST_UNBLOCK_SOURCE
! 641: - MCAST_JOIN_SOURCE_GROUP
! 642: - MCAST_LEAVE_SOURCE_GROUP
! 643: - OPENSSL_CIPHER_AES_128_CBC
! 644: - OPENSSL_CIPHER_AES_192_CBC
! 645: - OPENSSL_CIPHER_AES_256_CBC
! 646: - OPENSSL_RAW_DATA
! 647: - OPENSSL_ZERO_PADDING
! 648: - PHP_OUTPUT_HANDLER_CLEAN
! 649: - PHP_OUTPUT_HANDLER_CLEANABLE
! 650: - PHP_OUTPUT_HANDLER_DISABLED
! 651: - PHP_OUTPUT_HANDLER_FINAL
! 652: - PHP_OUTPUT_HANDLER_FLUSH
! 653: - PHP_OUTPUT_HANDLER_FLUSHABLE
! 654: - PHP_OUTPUT_HANDLER_REMOVABLE
! 655: - PHP_OUTPUT_HANDLER_STARTED
! 656: - PHP_OUTPUT_HANDLER_STDFLAGS
! 657: - PHP_OUTPUT_HANDLER_WRITE
! 658: - PHP_QUERY_RFC1738
! 659: - PHP_QUERY_RFC3986
! 660: - PHP_SESSION_ACTIVE
! 661: - PHP_SESSION_DISABLED
! 662: - PHP_SESSION_NONE
! 663: - SCANDIR_SORT_ASCENDING
! 664: - SCANDIR_SORT_DESCENDING
! 665: - SCANDIR_SORT_NONE
! 666: - SORT_FLAG_CASE
! 667: - SORT_NATURAL
! 668: - STREAM_META_ACCESS
! 669: - STREAM_META_GROUP
! 670: - STREAM_META_GROUP_NAME
! 671: - STREAM_META_OWNER
! 672: - STREAM_META_OWNER_NAME
! 673: - STREAM_META_TOUCH
! 674: - T_CALLABLE
! 675: - T_INSTEADOF
! 676: - T_TRAIT
! 677: - T_TRAIT_C
! 678: - ZLIB_ENCODING_DEFLATE
! 679: - ZLIB_ENCODING_GZIP
! 680: - ZLIB_ENCODING_RAW
! 681: - U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
! 682: - IDNA_CHECK_BIDI
! 683: - IDNA_CHECK_CONTEXTJ
! 684: - IDNA_NONTRANSITIONAL_TO_ASCII
! 685: - IDNA_NONTRANSITIONAL_TO_UNICODE
! 686: - INTL_IDNA_VARIANT_2003
! 687: - INTL_IDNA_VARIANT_UTS46
! 688: - IDNA_ERROR_EMPTY_LABEL
! 689: - IDNA_ERROR_LABEL_TOO_LONG
! 690: - IDNA_ERROR_DOMAIN_NAME_TOO_LONG
! 691: - IDNA_ERROR_LEADING_HYPHEN
! 692: - IDNA_ERROR_TRAILING_HYPHEN
! 693: - IDNA_ERROR_HYPHEN_3_4
! 694: - IDNA_ERROR_LEADING_COMBINING_MARK
! 695: - IDNA_ERROR_DISALLOWED
! 696: - IDNA_ERROR_PUNYCODE
! 697: - IDNA_ERROR_LABEL_HAS_DOT
! 698: - IDNA_ERROR_INVALID_ACE_LABEL
! 699: - IDNA_ERROR_BIDI
! 700: - IDNA_ERROR_CONTEXTJ
! 701:
! 702: e. New classes
! 703:
! 704: - Reflection:
! 705: - ReflectionZendExtension
! 706:
! 707: - Intl:
! 708: - Transliterator
! 709: - Spoofchecker
! 710:
! 711: - JSON:
! 712: - JsonSerializable
! 713:
! 714: - Session:
! 715: - SessionHandler
! 716:
! 717: - SNMP:
! 718: - SNMP
! 719:
! 720: - SPL:
! 721: - CallbackFilterIterator
! 722: - RecursiveCallbackFilterIterator
! 723:
! 724: f. New methods
! 725:
! 726: - Closure:
! 727: - Closure::bind()
! 728: - Closure::bindTo()
! 729:
! 730: - Reflection:
! 731: - ReflectionClass::getTraitAliases()
! 732: - ReflectionClass::getTraitNames()
! 733: - ReflectionClass::getTraits()
! 734: - ReflectionClass::isCloneable()
! 735: - ReflectionClass::isTrait()
! 736: - ReflectionClass::newInstanceWithoutConstructor()
! 737: - ReflectionExtension::isPersistent()
! 738: - ReflectionExtension::isTemporary()
! 739: - ReflectionFunction::getClosure()
! 740: - ReflectionFunction::getClosureScopeClass()
! 741: - ReflectionFunction::getClosureThis()
! 742: - ReflectionFunctionAbstract::getClosureScopeClass()
! 743: - ReflectionFunctionAbstract::getClosureThis()
! 744: - ReflectionMethod::getClosure()
! 745: - ReflectionMethod::getClosureScopeClass()
! 746: - ReflectionMethod::getClosureThis()
! 747: - ReflectionObject::getTraitAliases()
! 748: - ReflectionObject::getTraitNames()
! 749: - ReflectionObject::getTraits()
! 750: - ReflectionObject::isCloneable()
! 751: - ReflectionObject::isTrait()
! 752: - ReflectionObject::newInstanceWithoutConstructor()
! 753: - ReflectionParameter::canBePassedByValue()
! 754: - ReflectionParameter::isCallable()
! 755:
! 756: - PDO_DBLIB:
! 757: - PDO::newRowset()
! 758:
! 759: - SPL:
! 760: - DirectoryIterator::getExtension()
! 761: - RegexIterator::getRegex()
! 762: - SplDoublyLinkedList::serialize()
! 763: - SplDoublyLinkedList::unserialize()
! 764: - SplFileInfo::getExtension()
! 765: - SplFileObject::fputcsv()
! 766: - SplObjectStorage::getHash()
! 767: - SplQueue::serialize
! 768: - SplQueue::unserialize
! 769: - SplStack::serialize
! 770: - SplStack::unserialize
! 771: - SplTempFileObject::fputcsv
! 772:
! 773: - XSLT:
! 774: - XsltProcessor::setSecurityPrefs()
! 775: - XsltProcessor::getSecurityPrefs()
! 776:
! 777: - Zlib:
! 778: - zlib_decode()
! 779: - zlib_encode()
! 780:
! 781: g. New Hash algorithms
! 782:
! 783: - fnv132
! 784: - fnv164
! 785: - joaat
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>