�������ݵı��

������쳣������صı��

�� PHP 7 �У��ܶ����������Լ��ɻָ����������󣬶���ת��Ϊ�쳣�������ˡ� ��Щ�쳣�̳��� Error �࣬����ʵ���� Throwable �ӿ� �������쳣��ʵ������������ӿڣ���

��Ҳ��ζ�ţ������������ʱ����ǰ�����е�һЩ������Ĵ��뽫�޷��������� ��Ϊ�� PHP 7 �汾�У��Ѿ�ʹ���׳��쳣�Ĵ���������ˡ� �����������û�в��� Error �쳣����ô�������������󣩡�

PHP 7 �еĴ�����ĸ���������������μ� PHP 7 �������� ��Ǩ��ָ����Ҫ���г��Լ�������Ӱ��ı����

set_exception_handler() ���ٱ�֤�յ���һ���� Exception ����

�׳� Error ����ʱ����� set_exception_handler() ����쳣����������������� Exception �����ᵼ�� fatal error��

��Ҫ�쳣������ͬʱ֧�� PHP5 �� PHP7��Ӧ��ɾ���쳣������������������������������������� PHP7������԰����� Exception �滻�� Throwable��

<?php
// PHP 5 ʱ���Ĵ��뽫���������
function handler(Exception $e) { ... }
set_exception_handler('handler');

// ���� PHP 5 �� 7
function handler($e) { ... }

// ��֧�� PHP 7
function handler(Throwable $e) { ... }
?>

���ڲ�������ʧ�ܵ�ʱ�������׳��쳣

��֮ǰ�汾�У�����ڲ���Ĺ����������᷵�� NULL ����һ�������õĶ��� �� PHP 7 ��ʼ������ڲ��๹������������ ��ô���׳��쳣��

����������׳� ParseError �쳣

����������׳� ParseError �쳣�� ���� eval() ��������Ҫ���������һ�� catch ��������������������

E_STRICT ���漶����

ԭ�е� E_STRICT ���涼��Ǩ�Ƶ��������� E_STRICT �����ᱻ���������Ե��� error_reporting(E_ALL|E_STRICT) ������������

E_STRICT ���漶����
���� �µļ���/��Ϊ
����Դ���͵ı������������������� E_NOTICE
����̬���� ���پ��棬����������
�ظ����幹�������� ���پ��棬����������
�ڼ̳е�ʱ�򣬷���ǩ����ƥ�� E_WARNING
������ trait �а�����ͬ�ģ����ݵģ����� ���پ��棬����������
�ԷǾ�̬���õķ�ʽ���ʾ�̬���� E_NOTICE
����Ӧ�������õķ�ʽ��ֵ E_NOTICE
����Ӧ�������õķ�ʽ���ݣ������������У� E_NOTICE
�Ծ�̬��ʽ����ʵ������ E_DEPRECATED

���ڱ�������ı仯

PHP 7 ����ʹ���˳����﷨��������Դ���롣��ʹ���������֮ǰ��PHP�Ľ�������������������ʵ�ֵĸĽ�����ʵ�֡� ������һ���Ե�ԭ������һЩ�������ӵı䶯������Щ�䶯�����������ݡ� ����һ���н���ϸ������Щ���ӡ�

���ڼ��ʹ�ñ��������Ժͷ����ı仯

�Ա��������Ժͷ����ļ�ӵ������ڽ��ϸ���ѭ�����ҵ�˳����������������֮ǰ�Ļ����ż������ⰸ��������� �������ű�˵�����������˳��ı仯��

��ӵ��õı��ʽ���¾ɽ���˳��
���ʽ PHP 5 �Ľ�����ʽ PHP 7 �Ľ�����ʽ
$$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()

ʹ���˾ɵĴ��ҵ���Ľ���˳��Ĵ�����뱻��д����ȷ��ʹ�ô�����������˳�򣨲μ��ϱ��м�һ�У��� ����ʹ�ô���ȱ�������PHP 7.x��ǰ������ԣ��ֱ�������PHP 5.x�ĺ�������ԡ�

��ͬ��Ӱ���� global �ؼ��֡������Ҫ�Ļ�����ʹ�ô�������ģ��֮ǰ����Ϊ��

<?php
function f() {
    
// Valid in PHP 5 only.
    
global $$foo->bar;

    
// Valid in PHP 5 and 7.
    
global ${$foo->bar};
}
?>

����list()����ʽ�ı��

list() �����Է����˳�������и�ֵ

list() ���ڻᰴ�ձ��������˳���������ǽ��и�ֵ�����Ƿ�������˳�� ͨ����˵����ֻ��Ӱ��list() �������[]������һ��ʹ�õİ�����������ʾ��

<?php
list($a[], $a[], $a[]) = [123];
var_dump($a);
?>

Output of the above example in PHP 5:

array(3) {
  [0]=>
  int(3)
  [1]=>
  int(2)
  [2]=>
  int(1)
}

Output of the above example in PHP 7:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

��֮�������Ƽ���Ҫ����list()�ĸ�ֵ˳����Ϊ����һ����δ��Ҳ�������ʵ��ϸ�ڡ�

�յ�list()��ֵ֧���Ѿ����Ƴ�

list() �ṹ���ڲ������ǿյġ����µ����Ӳ��ٱ�����

<?php
list() = $a;
list(,,) = 
$a;
list(
$x, list(), $y) = $a;
?>
list()�����ܽ⿪string

list() �����ܽ⿪�ַ�����string�������� �����ʹ��str_split()����������

Array ordering when elements are automatically created during by reference assignments has changed

The order of the elements in an array has changed when those elements have been automatically created by referencing them in a by reference assignment. For example:

<?php
$array 
= [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);
?>

Output of the above example in PHP 5:

array(2) {
  ["b"]=>
  &int(1)
  ["a"]=>
  &int(1)
}

Output of the above example in PHP 7:

array(2) {
  ["a"]=>
  &int(1)
  ["b"]=>
  &int(1)
}

�����������������Ų���Ӱ����Ϊ

�� PHP 5�У��������÷�ʽ���ݺ�������ʱ��ʹ����������ŶԿ��������ϸ��׼ �ľ��档���ڣ���������ܻᴥ����

<?php
function getArray() {
    return [
123];
}

function 
squareArray(array &$a) {
    foreach (
$a as &$v) {
        
$v **= 2;
    }
}

// Generates a warning in PHP 7.
squareArray((getArray()));
?>

�������̻������

Notice: Only variables should be passed by reference in /tmp/test.php on line 13

foreach�ı仯

foreach������ϸ΢�ı仯�����ƽṹ�� ��ҪΧ�����е��ڲ�����ָ��͵���������޸ġ�

foreach���ٸı��ڲ�����ָ��

��PHP7֮ǰ��������ͨ�� foreach ����ʱ������ָ����ƶ������ڿ�ʼ��������ˣ����������

<?php
$array 
= [012];
foreach (
$array as &$val) {
    
var_dump(current($array));
}
?>

Output of the above example in PHP 5:

int(1)
int(2)
bool(false)

Output of the above example in PHP 7:

int(0)
int(0)
int(0)

foreach ͨ��ֵ����ʱ��������ֵΪ����ĸ���

��Ĭ��ʹ��ͨ��ֵ��������ʱ��foreach ʵ�ʲ�����������ĵ����������������鱾�������ζ�ţ�foreach �еIJ��������޸�ԭ�����ֵ��

foreachͨ�����ñ���ʱ���и��õĵ�������

��ʹ�����ñ�������ʱ������ foreach �ڵ������ܸ��õĸ��ٱ仯�����磬�ڵ��������һ������ֵ�������У��ο�����Ĵ��룺

<?php
$array 
= [0];
foreach (
$array as &$val) {
    
var_dump($val);
    
$array[1] = 1;
}
?>

Output of the above example in PHP 5:

int(0)

Output of the above example in PHP 7:

int(0)
int(1)

��Traversable ����ı���

����һ����Traversable���󽫻������һ�������������Ϊ��ͬ�� �⽫�����ڶ�����ӻ�ɾ������ʱ��foreachͨ�����ñ���ʱ���и��õĵ�������Ҳ�ܱ�Ӧ��

Changes to integer handling

��Ч�İ˽����ַ���Invalid octal literals��

��֮ǰ��һ���˽����ַ����������Ч���֣�����Ч���ֽ�����Ĭɾ��(0128 ��������Ϊ 012). ���������İ˽����ַ���������������

��λ�����㣨Negative bitshifts��

�Ը�����ʽ���е�λ�����㽫���׳�һ�� ArithmeticError��

<?php
var_dump
(>> -1);
?>

Output of the above example in PHP 5:

int(0)

Output of the above example in PHP 7:

Fatal error: Uncaught ArithmeticError: Bit shift by negative number in /tmp/test.php:2
Stack trace:
#0 {main}
  thrown in /tmp/test.php on line 2

����������

���� integer λ���λ�Ʋ����������ĸ����򣩽�ʼ�յõ� 0 ��Ϊ������ڴ�ǰ����һ�����ǽṹ�����ġ�

string�����ϵĵ���

ʮ�������ַ������ٱ���Ϊ������

��ʮ�������ַ������ٱ���Ϊ�����֡����磺

<?php
var_dump
("0x123" == "291");
var_dump(is_numeric("0x123"));
var_dump("0xe" "0x1");
var_dump(substr("foo""0x1"));
?>

Output of the above example in PHP 5:

bool(true)
bool(true)
int(15)
string(2) "oo"

Output of the above example in PHP 7:

bool(false)
bool(false)
int(0)

Notice: A non well formed numeric value encountered in /tmp/test.php on line 5
string(3) "foo"

filter_var() �����������ڼ��һ�� string �Ƿ���ʮ����������,������ת��Ϊinteger:

<?php
$str 
"0xffff";
$int filter_var($strFILTER_VALIDATE_INTFILTER_FLAG_ALLOW_HEX);
if (
false === $int) {
    throw new 
Exception("Invalid integer!");
}
var_dump($int); // int(65535)
?>

\u{ �����������

�����µ� Unicode codepoint escape syntax�﷨�� ��������Ч���в�����\u{ ���ִ����������������� Ϊ�˱�����һ����Ӧ�ñ��ⷴб�ܿ�ͷ��

���Ƴ��ĺ�����Removed functions��

call_user_method() and call_user_method_array()

������������PHP 4.1.0��ʼ��������Ӧ��ʹ��call_user_func() �� call_user_func_array()�� ��Ҳ���Կ���ʹ�� �������� ���� ... ��������

���е� ereg* ����

���� ereg ϵ�к�����ɾ���ˡ� PCRE ��Ϊ�Ƽ������Ʒ��

mcrypt ����

�ѷ����� mcrypt_generic_end() �����ѱ��Ƴ�����ʹ��mcrypt_generic_deinit()���档

���⣬�ѷ����� mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() �� mcrypt_ofb() �����ѱ��Ƴ��������ǡ����MCRYPT_MODE_* ������ʹ�� mcrypt_decrypt()���д��档

���� ext/mysql ����

���� ext/mysql �����ѱ�ɾ���ˡ� ���ѡ��ͬ�� MySQL API��������� ѡ�� MySQL API��

���� ext/mssql ����

���� ext/mssql �����ѱ�ɾ���ˡ� ���Ʒ���б��μ� MSSQL ������

intl ����

�ѷ����� datefmt_set_timezone_id() �� IntlDateFormatter::setTimeZoneID() �����ѱ��Ƴ�����ʹ�� datefmt_set_timezone() �� IntlDateFormatter::setTimeZone()���档

set_magic_quotes_runtime()

set_magic_quotes_runtime(), �����ı��� magic_quotes_runtime()�ѱ��Ƴ�. ������PHP 5.3.0���Ѿ�������,���� ��in PHP 5.4.0Ҳ����ħ�����ŵķ�����ʧȥ���ܡ�

set_socket_blocking()

�ѷ����� set_socket_blocking() �����ѱ��Ƴ�����ʹ��stream_set_blocking()���档

dl() in PHP-FPM

dl()�� PHP-FPM ���ٿ��ã��� CLI �� embed SAPIs ���Կ��á�

GD Type1 functions

Support for PostScript Type1 fonts has been removed from the GD extension, resulting in the removal of the following functions:

�Ƽ�ʹ�� TrueType �������صĺ�����Ϊ�����

���Ƴ����� INI ����ָ��

���Ƴ��Ĺ���

���� INI ����ָ���Ѿ����Ƴ���ͬʱ�Ƴ��Ļ������Ӧ�Ĺ���

xsl.security_prefs

xsl.security_prefs ָ��Ƴ� ��Ԥ�����ʱ��ȡ����֮�ķ��� XsltProcessor::setSecurityPrefs() Ӧ�ñ����õ�

������������صı��

new �����������Ķ����������÷�ʽ��ֵ������

new ��䴴���Ķ����� �����õķ�ʽ��ֵ��������

<?php
class {}
$c =& new C;
?>

Output of the above example in PHP 5:

Deprecated: Assigning the return value of new by reference is deprecated in /tmp/test.php on line 3

Output of the above example in PHP 7:

Parse error: syntax error, unexpected 'new' (T_NEW) in /tmp/test.php on line 3

��Ч���ࡢ�ӿ��Լ� trait ����

���������������������ࡢ�ӿ��Լ� trait��

���⣬Ҳ��Ҫʹ�����е������������ࡢ�ӿ��Լ� trait����Ȼ�� PHP 7.0 �У� �Ⲣ������������ ������Щ�����DZ���������ʹ�õġ�

�Ƴ��� ASP �� script PHP ��ǩ

ʹ������ ASP �ı�ǩ���Լ� script ��ǩ������ PHP ����ķ�ʽ���Ƴ��� �ܵ�Ӱ��ı�ǩ�У�

���Ƴ��� ASP �� script ��ǩ
����ǩ �ձ�ǩ
<% %>
<%= %>
<script language="php"> </script>

�Ӳ�ƥ��������ķ������

�ڲ�ƥ������������Ծ�̬��ʽ���÷Ǿ�̬������ �� PHP 5.6 ���Ѿ������� ������ PHP 7.0 �У� �ᵼ�±����÷�����δ���� $this �������Լ�����Ϊ�Ѿ������ľ��档

<?php
class {
    public function 
test() { var_dump($this); }
}

// ע�⣺��û�д��� A �̳�
class {
    public function 
callNonStaticMethodOfA() { A::test(); }
}

(new 
B)->callNonStaticMethodOfA();
?>

Output of the above example in PHP 5.6:

Deprecated: Non-static method A::test() should not be called statically, assuming $this from incompatible context in /tmp/test.php on line 8
object(B)#1 (0) {
}

Output of the above example in PHP 7:

Deprecated: Non-static method A::test() should not be called statically in /tmp/test.php on line 8

Notice: Undefined variable: this in /tmp/test.php on line 3
NULL

yield ��������������

��ʹ�� yield �ؼ��ֵ�ʱ�򣬲�����Ҫ���ţ� ���������Ϊ�����Ӳ�����������������ȼ����� print �� => ֮�䡣 ����ܵ������д������Ϊ�����ı䣺

<?php
echo yield -1;
// ��֮ǰ�汾�лᱻ����Ϊ��
echo (yield) - 1;
// ���ڣ�����������Ϊ��
echo yield (-1);

yield 
$foo or die;
// ��֮ǰ�汾�лᱻ����Ϊ��
yield ($foo or die);
// ���ڣ�����������Ϊ��
(yield $foo) or die;
?>

����ͨ��ʹ���������������塣

�������岻���԰������ͬ������

�ں��������У������԰�����������ͬ���IJ����� ���磬��������еĺ�������ᴥ�� E_COMPILE_ERROR ����

<?php
function foo($a$b$unused$unused) {
    
//
}
?>

Switch ��䲻���԰������ default ��

�� switch ����У��������߶�� default ��Ĵ����Ѿ����ٱ�֧�֡� ���磬��������е� switch ���ᴥ�� E_COMPILE_ERROR ����

<?php
switch (1) {
    default:
    break;
    default:
    break;
}
?>

�ں����м��Ӳ���ֵ�᷵�� ��ǰ ��ֵ

���ں���������ʹ�� func_get_arg() �� func_get_args() ���������Ӳ���ֵ�� ����ʹ�� debug_backtrace() �����鿴���ݸ��٣� �Լ����쳣������������IJ���ֵ��ָ������ǰ��ֵ���п������Ѿ��������ڵĴ���ı����ֵ���� �������Dz��������뺯��ʱ���ԭʼֵ�ˡ�

<?php
function foo($x) {
    
$x++;
    
var_dump(func_get_arg(0));
}
foo(1);?>

Output of the above example in PHP 5:

1

Output of the above example in PHP 7:

2

$HTTP_RAW_POST_DATA ���Ƴ�

�����ṩ $HTTP_RAW_POST_DATA ������ ��ʹ�� php://input ��Ϊ�����

INI �ļ��� # ע�͸�ʽ���Ƴ�

�� INI �ļ��У�����֧���� # ��ʼ��ע���У� ��ʹ�� ;���ֺţ�����ʾע�͡� �˱�������� php.ini �Լ��� parse_ini_file() �� parse_ini_string() ������������ļ���

JSON ��չ�Ѿ��� JSOND ȡ��

JSON ��չ�Ѿ��� JSOND ��չȡ���� ������ֵ�Ĵ���������������Ҫע��ģ� ��һ����ֵ�����Ե�ţ�.������ �����磬��ֵ 34. ����д�� 34.0 �� 34���� �ڶ������ʹ�ÿ�ѧ��������ʾ��ֵ��e ǰ����벻�ǵ�ţ�.�� �����磬3.e3 ����д�� 3.0e3 �� 3e3���� ���⣬���ַ������ٱ�������Ч�� JSON �ַ�����

����ֵ�����ʱ���ڲ���������ʧ��

��������ת��Ϊ������ʱ�����������ֵ̫�󣬵����޷���������������£� ��֮ǰ�İ汾�У��ڲ�������ֱ�ӽ������ضϣ��������������� �� PHP 7.0 �У����������������������� E_WARNING ���󣬲��ҷ��� NULL��

�Զ���Ự�������ķ���ֵ�޸�

���Զ���Ự�������У���������ķ���ֵ���� FALSE��Ҳ���� -1�� �����������������ڣ������Щ�����ķ���ֵ���Dz���ֵ��Ҳ���� -1 ���� 0���������ý��������Ϊʧ�ܣ��������� E_WARNING ����

��ȵ�Ԫ��������ʱ��˳������

�����ڲ������㷨������������ ���ܻᵼ�¶Ա�ʱ����Ϊ��ȵĶ��Ԫ��֮���˳���ȶ���

Note:

�ڶԱ�ʱ����Ϊ��ȵĶ��Ԫ��֮�������˳���Dz��������ģ���ʹ����ȵ�����Ԫ�أ� ���ǵ�λ��Ҳ���ܱ������㷨���ı䡣

Mhash ������һ����������չ��

Mhash ��չ�Ѿ�����ȫ���Ͻ� Hash ��չ�ˡ� ��ˣ���Ҫ��ʹ�� extension_loaded() ����������Ƿ�֧�� MHash ��չ�ˣ� ����ʹ�� function_exists() ���������м�⡣ ���⣬���� get_loaded_extensions() �Լ���ص������У�Ҳ���ٱ��� �� MHash ��չ��ص���Ϣ�ˡ�