[TOC]
做一个简单的总结,没有涵盖全部改动,因为不常见。
# number_format()不会返回-0
因为-0这种写法很古怪,所以number_format(-0.01),会返回0。
# 对数组强制转成对象时,会将整形key转成string
直接看代码,
~~~
$a = [0 => 1]; $a = (object)$a; print_r($a->{0}); //或者 print_r($a->{'0'});
~~~
现在允许这么写。但是key已经变成string类型,即’0’。
# 不可以对不能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
~~~
# 可以对__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。
# 使用一个未定义的常量,会产生一个E_WARNING级别的错误。
~~~
echo NAME;
// Warning: Use of undefined constant NAME
~~~
# bcmod函数对于浮点数的操作
在之前,bcmod对于浮点数的运算类似于%操作符,但是在新版类似于fmod。
~~~
echo bcmod(4,3.5); // 之前会返回1,现在会返回1,5
~~~
# 对象返回类型声明
如果参数类型声明指定函数参数的预期类型,则返回类型声明指定返回值的预期类型。
返回类型声明指定了一个函数应该返回的变量的类型。
从PHP 7.2开始,我们被允许为对象数据类型使用返回类型声明。这里是一个例子:
~~~
class MyClass {
public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $arg) : object {
return $arg;
}
echo test($myclass)->var;
~~~
以前的PHP版本会导致以下致命错误:
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
当然,在PHP 7.2中,这个代码回应了“Hello World”。
# 参数类型加宽
PHP目前不允许子类和它们的父类或接口之间的参数类型有任何差异。这意味着什么?
考虑下面的代码:
~~~
<?php
class MyClass {
public function myFunction(array $myarray) { /* ... */ }
}
class MyChildClass extends MyClass {
public function myFunction($myarray) { /* ... */ }
}
~~~
这里我们省略了子类中的参数类型。在PHP 7.0中,这段代码会产生以下警告:
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
自PHP 7.2以来,我们被允许在不破坏任何代码的情况下省略子类中的类型。这个建议将允许我们升级类来在库中使用类型提示,而不需要更新所有的子类。
# 在列表语法中尾随逗号
数组中最后一项之后的尾随逗号是PHP中的有效语法,有时为了方便追加新项目并避免由于缺少逗号而导致解析错误,鼓励使用该语法。自PHP 7.2以来,我们被允许在分组命名空间中使用尾随逗号。
请参阅列表语法中的尾随逗号以便在此RFC处获得更近的视图以及一些代码示例。
# 参数类型声明
从PHP 5开始,我们可以在函数的声明中指定期望传递的参数类型。如果给定的值是不正确的类型,那么PHP会抛出一个错误。参数类型声明(也称为类型提示)指定预期要传递给函数或类方法的变量的类型。
例如下面这个例子:
~~~
class MyClass {
public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $myclass){
return $myclass->var;
}
echo test($myclass);
~~~
在这个代码中,测试函数需要MyClass的一个实例。不正确的数据类型将导致以下致命错误:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
由于PHP 7.2 类型提示可以与对象数据类型一起使用,并且这种改进允许声明通用对象作为函数或方法的参数。这里是一个例子:
~~~
class MyClass {
public $var = '';
}
class FirstChild extends MyClass {
public $var = 'My name is Jim';
}
class SecondChild extends MyClass {
public $var = 'My name is John';
}
$firstchild = new FirstChild;
$secondchild = new SecondChild;
function test(object $arg) {
return $arg->var;
}
echo test($firstchild);
echo test($secondchild);
~~~
在这个例子中,我们调用了两次测试函数,每次调用都传递一个不同的对象。在以前的PHP版本中这是不可能的。
- OAuth
- 简介
- 步骤
- 单点登录
- .user.ini
- 时间转换为今天昨天前天几天前
- 获取ip接口
- 协程
- 概念
- yield-from && return-values
- 协程与阻塞的思考
- 中间件
- mysqli异步与php的协程
- 代码片段
- pdo 执行的sql语句
- 二进制安全
- 捕捉异常中断
- global
- 利用cookie模拟登陆
- 解析非正常json
- 简单的对称加密算法
- RSA 加密
- 过滤掉emoji表情
- 判断远程图片是否存在
- 一分钟限制请求100次
- 文件处理
- 多文件上传
- 显示所有文件
- 文件下载和上面显示所有文件配合
- 文件的删除,统计,存数组等
- 图片处理
- 简介
- 验证码
- 图片等比缩放
- 批量添加水印
- beanstalkd
- 安装
- 使用
- RabbitMQ
- 简介
- debain安装
- centos安装
- 常用方法
- 入门
- 工作队列
- 订阅,发布
- 路由
- 主题
- 远程调用RPC
- 消息中间件的选型
- .htaccess
- isset、empty、if区别以及0、‘’、null
- php各版本
- php7.2 不向后兼容的改动
- php中的各种坑
- php7改变
- php慢日志
- 邮件
- PHPMailer实现发邮件
- 验证邮件地址真实性
- 文件下载
- FastCgi 与 PHP-fpm 之间的关系
- openssl 加解密
- 反射
- 钩子方法
- 查找插件
- opcode
- opcache使用
- opcache优化
- 分布式一致性hash算法
- 概念
- 哈希算法好坏的四个定义
- php实现
- java实现
- 数组
- jwt
- jwt简介
- 单点登录
- phpize
- GeoIP扩展
- php无法获得https网页内容的解决方案
- homestead运行的脚本
- Unicode和Utf-8转换
- php优化
- kafka
- fpm配置
- configure配置详解