做一个简单的总结,没有涵盖全部改动,因为不常见。
1. number_format()不会返回-0
因为-0这种写法很古怪,所以number_format(-0.01),会返回0。
2. 对数组强制转成对象时,会将整形key转成string
直接看代码,
$a = [0 => 1]; $a = (object)$a; print_r($a->{0}); //或者 print_r($a->{'0'});
现在允许这么写。但是key已经变成string类型,即’0’。
3. 不可以对不能count的对象调用count函数
没有实现Countable接口的对象都不能调用count函数,比如 count(1),count(‘a’) 在之前都会返回1,但是在7.2版本以后,会返回一个E_WARNING级别的错误,看一个例子:
class _count implements Countable{
public function count() {
return 10;
}
}
$count = new _count();
echo count($count); // 10
4. 可以对__PHP_Incomplete_Class类型的对象调用is_object方法
__PHP_Incomplete_Class,这个东西就是有一个对象,php没有找到定义它的地方,就会把该对象的类型变成这个,举个例子:
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
print_r( unserialize($serialized_object) );
// __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => a [value] => 100 )
在解序列化的时候很常见,可以用unserialize_callback_func选项去避免,举个例子:
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func', 'mycallback'); // 设置回调
print_r( unserialize($serialized_object) );
function mycallback($classname)
{
require_once $classname.".php";
}
而在7,2版本对__PHP_Incomplete_Class对象调用is_object(),会返回true。
5. 使用一个未定义的常量,会产生一个E_WARNING级别的错误。
echo NAME;
// Warning: Use of undefined constant NAME
6. bcmod函数对于浮点数的操作
在之前,bcmod对于浮点数的运算类似于%操作符,但是在新版类似于fmod。
echo bcmod(4,3.5); // 之前会返回1,现在会返回1,5