PHP7新特性
2019-06-18 16:40:38 15 举报
AI智能生成
php7新特性的理解和比较总结
作者其他创作
大纲/内容
PHP 标量类型与返回值类型声明
强制模式 (默认)declare(strict_types=0);
严格模式declare(strict_types=1);值必须是 指定类型
PHP NULL 合并运算符(??)
旧写法$site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';
新写法$site = $_GET['site'] ?? '菜鸟教程';
PHP 太空船运算符(组合比较符)(<=>)
1 <=> 1 等于返回0
1 <=> 2 小于返回-1
2<=> 1 大于返回1
PHP 常量数组
PHP 5.6 中仅能通过 const 定义常量数组
PHP 7 可以通过 define() 来定义
PHP 匿名类
通过 new class 来实例化一个匿名类,这可以用来替代一些"用后即焚"的完整类定义
PHP 7 use 语句
// PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类、函数和常量:
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
// PHP 7 之前版本需要使用多次 use
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
// PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类、函数和常量:
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
PHP 7 错误处理
catch (Error $e) { ... }或注册异常处理函数( set_exception_handler())
ArithmeticError
AssertionError
DivisionByZeroError
ParseError
TypeError
catch (Exception $e) { ... }
LogicException
RuntimeException
PHP intdiv() 函数
返回值为第一个参数除于第二个参数的值并取整 echo intdiv(9,3) //3
PHP 7 Session 选项
可以接收一个数组作为参数,可以覆盖 php.ini 中 session 的配置项。
session_start([
'cache_limiter' => 'private', //在读取完毕会话数据之后马上关闭会话存储文件
'cookie_lifetime'=>3600, //SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废
'read_and_close'=>true //在读取完会话数据之后, 立即关闭会话存储文件,不做任何修改
]);
session_start([
'cache_limiter' => 'private', //在读取完毕会话数据之后马上关闭会话存储文件
'cookie_lifetime'=>3600, //SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废
'read_and_close'=>true //在读取完会话数据之后, 立即关闭会话存储文件,不做任何修改
]);
PHP 7 废弃特性
不再支持 函数可以与类名同名
不再支持 以静态的方式调用非静态方法
password_hash 函数内部默认带有 salt 能力,无需开发者提供 salt 值
废弃了 "capture_session_meta" SSL 上下文选项
PHP Closure::call()
有更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数
PHP 过滤 unserialize()
// 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
PHP IntlChar()
提供了一些可用于访问Unicode字符信息的实用方法的访问. 注意:必须安装Intl扩展才能使用!
PHP CSPRNG
random_bytes() - 加密生成被保护的伪随机字符串
random_int( int $min , int $max ) - 加密生存被保护的伪随机整数。
PHP 7 异常
zend.assertions
1 - 生成和执行代码 (开发模式)(默认值)
0 - 生成代码,但在执行时跳过它
-1 - 不生成代码 (生产环境)
assert.exception
1 - 断言失败时抛出,可以抛出异常对象,如果没有提供异常,则抛出 AssertionError 对象实例。
0 - 使用或生成 Throwable, 仅仅是基于对象生成的警告而不是抛出对象(与 PHP 5 兼容)
PHP 7 移除的扩展
ereg
mssql
mysql
sybase_ct
PHP 7 移除的 SAPI (PHP与其他应用交互的接口)
aolserver
apache
apache_hooks
apache2filter
caudium
continuity
isapi
milter
nsapi
phttpd
pi3web
roxen
thttpd
tux
webjames
apache
apache_hooks
apache2filter
caudium
continuity
isapi
milter
nsapi
phttpd
pi3web
roxen
thttpd
tux
webjames
0 条评论
下一页