�� PHP 7 �У��ܶ����������Լ��ɻָ�������������ת��Ϊ�쳣�������ˡ� ��Щ�쳣�̳��� Error �࣬����ʵ���� Throwable �ӿ� �������쳣��ʵ������������ӿڣ���
��Ҳ��ζ�ţ������������ʱ����ǰ�����е�һЩ������Ĵ��뽫���������� ��Ϊ�� PHP 7 �汾�У��Ѿ�ʹ���׳��쳣�Ĵ���������ˡ� �����������û�в��� Error �쳣����ô��������������
PHP 7 �еĴ�����ĸ���������������μ� PHP 7 �������� ��Ǩ��ָ����Ҫ���г��Լ�������Ӱ��ı����
�׳� 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 �쳣�� ���� eval() ��������Ҫ���������һ�� catch ��������������������
ԭ�е� E_STRICT
���涼��Ǩ�Ƶ���������
E_STRICT
�����ᱻ���������Ե���
error_reporting(E_ALL|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() �������[]
������һ��ʹ�õİ�����������ʾ��
<?php
list($a[], $a[], $a[]) = [1, 2, 3];
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() �ṹ���ڲ������ǿյġ����µ����Ӳ��ٱ�����
<?php
list() = $a;
list(,,) = $a;
list($x, list(), $y) = $a;
?>
list() �����ܽ�ַ�����string�������� �����ʹ��str_split()����������
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 [1, 2, 3];
}
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������ϸ�ı仯�����ƽṹ�� ��ҪΧ�����е��ڲ�����ָ��͵���������ġ�
��PHP7֮ǰ��������ͨ�� foreach ����ʱ������ָ����ƶ������ڿ�ʼ��������ˣ����������
<?php
$array = [0, 1, 2];
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 �еIJ���������ԭ�����ֵ��
��ʹ�����ñ�������ʱ������ 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���������һ�������������Ϊ��ͬ�� �⽫�����ڶ�����ӻ�ɾ������ʱ��foreachͨ�����ñ���ʱ���и��õĵ�������Ҳ�ܱ�Ӧ��
��֮ǰ��һ���˽����ַ����������Ч���֣�����Ч���ֽ�����Ĭɾ��(0128 ��������Ϊ 012). ���������İ˽����ַ���������������
�Ը�����ʽ���е�λ�����㽫���׳�һ�� ArithmeticError��
<?php
var_dump(1 >> -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 ��Ϊ������ڴ�ǰ����һ�����ǽṹ�����ġ�
��ʮ�������ַ������ٱ���Ϊ�����֡����磺
<?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($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
if (false === $int) {
throw new Exception("Invalid integer!");
}
var_dump($int); // int(65535)
?>
�����µ� Unicode codepoint escape syntax��� ��������Ч���в�����\u{ ���ִ����������������� Ϊ�˱�����һ����Ӧ�ñ��ⷴб�ܿ�ͷ��
������������PHP 4.1.0��ʼ��������Ӧ��ʹ��call_user_func() �� call_user_func_array()�� ��Ҳ���Կ���ʹ�� �������� ���� ... ��������
�ѷ����� mcrypt_generic_end() �����ѱ��Ƴ�����ʹ��mcrypt_generic_deinit()���档
���⣬�ѷ����� mcrypt_ecb(),
mcrypt_cbc(), mcrypt_cfb() ��
mcrypt_ofb() �����ѱ��Ƴ��������ǡ����MCRYPT_MODE_*
������ʹ�� mcrypt_decrypt()���д��档
���� ext/mysql �����ѱ�ɾ���ˡ� ���ѡ��ͬ�� MySQL API��������� ѡ�� MySQL API��
���� ext/mssql �����ѱ�ɾ���ˡ� ���Ʒ���б��μ� MSSQL ������
�ѷ����� datefmt_set_timezone_id() �� IntlDateFormatter::setTimeZoneID() �����ѱ��Ƴ�����ʹ�� datefmt_set_timezone() �� IntlDateFormatter::setTimeZone()���档
set_magic_quotes_runtime(), �����ı��� magic_quotes_runtime()�ѱ��Ƴ�. ������PHP 5.3.0���Ѿ�������,���� ��in PHP 5.4.0Ҳ����ħ�����ŵķ�����ʧȥ���ܡ�
�ѷ����� set_socket_blocking() �����ѱ��Ƴ�����ʹ��stream_set_blocking()���档
Support for PostScript Type1 fonts has been removed from the GD extension, resulting in the removal of the following functions:
�Ƽ�ʹ�� TrueType �������صĺ�����Ϊ�����
xsl.security_prefs
xsl.security_prefs
ָ��Ƴ�
��Ԥ�����ʱ��ȡ����֮�ķ��� XsltProcessor::setSecurityPrefs()
Ӧ�ñ����õ�
new ��䴴���Ķ����� �����õķ�ʽ��ֵ��������
<?php
class C {}
$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����Ȼ�� PHP 7.0 �У� �Ⲣ������������ ������Щ�����DZ���������ʹ�õġ�
ʹ������ ASP �ı�ǩ���Լ� script ��ǩ������ PHP ����ķ�ʽ���Ƴ��� �ܵ�Ӱ��ı�ǩ�У�
����ǩ | �ձ�ǩ |
---|---|
<% |
%> |
<%= |
%> |
<script language="php"> |
</script> |
�ڲ�ƥ������������Ծ�̬��ʽ���÷Ǿ�̬������ �� PHP 5.6 ���Ѿ������� ������ PHP 7.0 �У� �ᵼ�±����÷�����δ���� $this �������Լ�����Ϊ�Ѿ������ľ��档
<?php
class A {
public function test() { var_dump($this); }
}
// ע�⣺��û�д��� A �̳�
class B {
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 �ؼ��ֵ�ʱ������Ҫ���ţ� ���������Ϊ�����Ӳ�����������������ȼ����� 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 ���ᴥ��
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 ������ ��ʹ�� php://input ��Ϊ�����
�� INI �ļ��У�����֧���� # ��ʼ��ע���У� ��ʹ�� ;���ֺţ�����ʾע�͡� �˱�������� php.ini �Լ��� parse_ini_file() �� parse_ini_string() ������������ļ���
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 ��չ�Ѿ�����ȫ���Ͻ� Hash ��չ�ˡ� ��ˣ���Ҫ��ʹ�� extension_loaded() ����������Ƿ�֧�� MHash ��չ�ˣ� ����ʹ�� function_exists() ���������м�⡣ ���⣬���� get_loaded_extensions() �Լ���ص������У�Ҳ���ٱ��� �� MHash ��չ��ص���Ϣ�ˡ�