PHP 7.1 UPGRADE NOTES

1. Backward Incompatible Changes
2. New Features
3. Changes in SAPI modules
4. Deprecated Functionality
5. Changed Functions
6. New Functions
7. New Classes and Interfaces
8. Removed Extensions and SAPIs
9. Other Changes to Extensions
10. New Global Constants
11. Changes to INI File Handling
12. Windows Support
13. Other Changes


========================================
1. Backward Incompatible Changes
========================================

- Core:
  . 'void' can no longer be used as the name of a class, interface, or trait.
    This applies to declarations, class_alias() and use statements.
  . (int), intval() where $base is 10 or unspecified, settype(), decbin(),
    decoct(), dechex(), integer operators and other conversions now always
    respect scientific notation in numeric strings.
    (RFC: https://wiki.php.net/rfc/invalid_strings_in_arithmetic)
  . The ASCII 0x7F Delete control character is no longer permitted in unquoted
    identifiers in source code.
  . The following functions may no longer be called dynamically using $func(),
    call_user_func(), array_map() or similar:
     . extract()
     . compact()
     . get_defined_vars()
     . func_get_args()
     . func_get_arg()
     . func_num_args()
     . parse_str() with one argument
     . mb_parse_str() with one argument
     . assert() with a string argument
    (RFC: https://wiki.php.net/rfc/forbid_dynamic_scope_introspection)
  . If the error_log is set to syslog, the PHP error levels are mapped to the
    syslog error levels. This brings finer differentiation in the error logs
    in contrary to the previous approach where all the errors are loggged with
    the notice level only.

- JSON:
  . When calling json_encode with JSON_UNESCAPED_UNICODE option, U+2028 and
    U+2029 are escaped.

========================================
2. New Features
========================================
- Core
  . Added void return type, which requires that a function not return a value.
    (RFC: https://wiki.php.net/rfc/void_return_type)
  . String offset access now supports negative references, which will be
    counted from the end of the string.
    (RFC: https://wiki.php.net/rfc/negative-string-offsets)
  . Added a form of the list() construct where keys can be specified.
    (RFC: https://wiki.php.net/rfc/list_keys)
  . Added [] = as alternative construct to list() =.
    (RFC: https://wiki.php.net/rfc/short_list_syntax)
  . Number operators taking numeric strings now emit "A non well formed numeric
    value encountered" E_NOTICEs for leading-numeric strings, and "A
    non-numeric value encountered" E_WARNINGs for non-numeric strings.
    This always applies to the +, -, *, /, **, %, << and >> operators, and
    their assignment counterparts +=, -=, *=, /=, **=, %=, <<= and >>=.
    For the bitwise operators |, & and ^, and their assignment counterparts
    |=, &= and ^=, this only applies where only one operand is a string.
    Note that this never applies to the bitwise NOT operator, ~, which does not
    handle numeric strings, nor to the increment and decrement operators
    ++ and --, which have a unique approach to handling numeric strings.
    (RFC: https://wiki.php.net/rfc/invalid_strings_in_arithmetic)

========================================
3. Changes in SAPI modules
========================================

========================================
4. Deprecated Functionality
========================================

========================================
5. Changed Functions
========================================
- get_headers() has an extra parameter which allows passing a custom stream
  context.
- The first $varname argument for getenv() is no longer mandatory, the
  current environment variables will be returned as an associative array
  when omitted.
- json_encode() accepts new option JSON_UNESCAPED_LINE_TERMINATORS that
  disables escaping of U+2028 and U+2029 characters when
  JSON_UNESCAPED_UNICODE is supplied.
- long2ip() accepts integer as parameter now
- pg_last_notice() accepts optional long parameter to specify operation.
  PGSQL_NOTICE_LAST - Get last notice (Default)
  PGSQL_NOTICE_ALL - Get all stored notices
  PGSQL_NOTICE_CLEAR - Remove all stored notices
  It returns empty string or array on successful PGSQL_NOTICE_LAST/ALL calls.
  It returned FALSE for empty notice previously.
- pg_fetch_all() accepts 2nd optional result type parameter like
  pg_fetch_row().
- pg_select() accepts 4th optional result type parameter like pg_fetch_row().
- parse_url() is more restrictive now and supports RFC3986.
- unpack() accepts an additional optional $offset argument. '@' format code
  (that specifes an absolute position) is applyed to input data after
  the $offset argument.
- strpos(), stripos(), substr_count(), grapheme_strpos(), grapheme_stripos(),
  grapheme_extract(), iconv_strpos(), mb_strimwidth(), mb_ereg_search_setpos(),
  mb_strpos() and mb_stripos() now accept negative string offsets.
- substr_count() and mb_strimwidth() additionally also accept negative length.
- file_get_contents() accepts a negative seek offset if the stream is seekable.

========================================
6. New Functions
========================================

========================================
7. New Classes and Interfaces
========================================

========================================
8. Removed Extensions and SAPIs
========================================

========================================
9. Other Changes to Extensions
========================================
- SQLite3:
  . Upgraded bundled SQLite lib to 3.9.2

========================================
10. New Global Constants
========================================

- JSON:
  . JSON_UNESCAPED_LINE_TERMINATORS

- Pgsql:
  PGSQL_NOTICE_LAST
  PGSQL_NOTICE_ALL
  PGSQL_NOTICE_CLEAR

========================================
11. Changes to INI File Handling
========================================

========================================
12. Windows Support
========================================

- Core:
  . Support for ftok()

- FCGI
  . PHP_FCGI_CHILDREN is respected. If this environment variable is defined,
    the first php-fcgi.exe process will exec the specified number of children.
    Those will share the same TCP socket. 

- readline:
  . The readline extension is supported through the WinEditLine library
    (http://mingweditline.sourceforge.net/). Thereby, the interactive CLI
    shell is supported as well (php.exe -a).

    It is well known, but nevertheless is worth mentioning again, that
    the readline extension is not thread safe and will never be. Thus,
    the usage of it with any true thread safe SAPI (like Apache mod_winnt) is
    strongely discouraged.

========================================
13. Other Changes
========================================

