2、php null 合并运算符
3、php 太空船运算符(组合比较符)
4、php 常量数组
5、php 匿名类
6、php closure::call()
7、php 过滤 unserialize()
8、php intlchar()
9、php csprng
10、php 7 异常
11、php 7 use 语句
12、php 7 错误处理
13、php intp() 函数
14、php 7 session 选项
15、php 7 废弃特性
16、php 7 移除的扩展
17、php 7 移除的 sapi
php 标量类型与返回值类型声明标量类型声明
强制模式
declare(strict_types=1) ecb704628f0d1ba7498867870ef3bec0以上程序执行输出结果为:9复制代码
严格模式
43ec82d44a534e8fd5e8416c4719c4dd以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:php fatal error: uncaught typeerror: argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
php null 合并运算符以前的三元运算
$site = isset($_get['site']) ? $_get['site'] : '菜鸟教程';复制代码
现在的合并运算符
$site = $_get['site'] '菜鸟教程';复制代码
以上2种方法是一样的
以下是实例:
937b551757918eaa8d4bc2575cf4f5cc复制代码
组合比较符,又称太空船运算符php 7 新增加的太空船运算符(组合比较符)用于比较两个表达式 $a 和 $b,如果 $a 小于、等于或大于 $b时,它分别返回-1、0或1。
以下是实例
838d2955445a31c5bbdfb717d04cb05d 1);print(php_eol);print( 1 96b4fef55684b9312718d5de63fb7121 2);print(php_eol);print( 2 96b4fef55684b9312718d5de63fb7121 1);print(php_eol);print(php_eol); // php_eol 为换行符// 浮点型比较print( 1.5 96b4fef55684b9312718d5de63fb7121 1.5);print(php_eol);print( 1.5 96b4fef55684b9312718d5de63fb7121 2.5);print(php_eol);print( 2.5 96b4fef55684b9312718d5de63fb7121 1.5);print(php_eol);print(php_eol);// 字符串比较print( a 96b4fef55684b9312718d5de63fb7121 a);print(php_eol);print( a 96b4fef55684b9312718d5de63fb7121 b);print(php_eol);print( b 96b4fef55684b9312718d5de63fb7121 a);print(php_eol);?>复制代码
以上结果分别为复制代码
0-110-110-11复制代码
php 常量数组以前定义常量数组 只能有 const;
现在定义常量数组可以使用 define();
以下是实例:
// 使用 define 函数来定义数组define('sites', [ 'google', 'runoob', 'taobao']);print(sites[1]);?>以上程序执行输出结果为:runoob复制代码
php 匿名类php 7 支持通过 new class 来实例化一个匿名类,这可以用来替代一些用后即焚的完整类定义。
以下是实例:
f59462b884d1e29413c7c5dcd5e665d5logger; } public function setlogger(logger $logger) { $this->logger = $logger; } } $app = new application; // 使用 new class 创建匿名类 $app->setlogger(new class implements logger { public function log(string $msg) { print($msg); } }); $app->getlogger()->log(我的第一条日志); ?>以上程序执行输出结果为:我的第一条日志复制代码
php closure::call()php 7 的 closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。
实例c887e2e2c47091b63aac6293b2ac837dx; }; // 闭包函数绑定到类 a 上 $getx = $getxcb->bindto(new a, 'a'); echo $getx(); print(php_eol); // php 7+ 代码 $getx = function() { return $this->x; }; echo $getx->call(new a); ?>以上程序执行输出结果为:11复制代码
php 过滤 unserialize()php 7 增加了可以为 unserialize() 提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据。
实例<?php class myclass1 { public $obj1prop; } class myclass2 { public $obj2prop; } $obj1 = new myclass1(); $obj1->obj1prop = 1; $obj2 = new myclass2(); $obj2->obj2prop = 2; $serializedobj1 = serialize($obj1); $serializedobj2 = serialize($obj2); // 默认行为是接收所有类 // 第二个参数可以忽略 // 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __php_incomplete_class 对象 $data = unserialize($serializedobj1 , ["allowed_classes" => true]); // 转换所有对象到 __php_incomplete_class 对象,除了 myclass1 和 myclass2 $data2 = unserialize($serializedobj2 , ["allowed_classes" => ["myclass1", "myclass2"]]); print($data->obj1prop); print(php_eol); print($data2->obj2prop); ?>以上程序执行输出结果为:12复制代码
注意 以上特性是unserialize()里面多了一个参数选择 allowed_classes
php csprng 伪随机数生成器csprng(cryptographically secure pseudo-random number generator,伪随机数产生器)。
php 7 通过引入几个 csprng 函数提供一种简单的机制来生成密码学上强壮的随机数。
random_bytes() - 加密生存被保护的伪随机字符串。
random_int() - 加密生存被保护的伪随机整数。
综上 类似于原先的 rand() 和 'mt_rand()'; 只不过 现在random_bytes()生成的是随机字符串
php7 异常php 7 异常用于向下兼容及增强旧的assert()函数。它能在生产环境中实现零成本的断言,并且提供抛出自定义异常及错误的能力。
老版本的api出于兼容目的将继续被维护。
assert()现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的 string或一个待测试的boolean。
assert()的应用 跟assert_option() 配合复制代码
还有参数类型
配置项默认值可选值
zend.assertions 1 1.生成和执行代码 (开发模式)
0.生成代码,但在执行时跳过它
-1.不生成代码 (生产环境)
assert.exception 0 1.断言失败时抛出,可以抛出异常对象,如果没有提供异常,则抛出assertionerror 对象实例。
0 . 使用或生成 throwable, 仅仅是基于对象生成的警告而不是抛出对象(与 php 5 兼容)
**参数**assertion断言。在 php 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 php 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。description如果 assertion 失败了,选项 description 将会包括在失败信息里。exception在 php 7 中,第二个参数可以是一个 throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出实例将 zend.assertions 设置为 0:实例<?php ini_set('zend.assertions', 0); assert(true == false); echo 'hi!'; ?>以上程序执行输出结果为:hi!将 zend.assertions 设置为 1,assert.exception 设置为 1:实例<?php ini_set('zend.assertions', 1); ini_set('assert.exception', 1); assert(true == false); echo 'hi!'; ?>以上程序执行输出结果为:fatal error: uncaught assertionerror: assert(true == false) in -:2stack trace:#0 -(2): assert(false, 'assert(true == ...')#1 {main} thrown in - on line 2复制代码
php 7 use 语句php 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量:
// php 7 之前版本需要使用多次 use use some\namespace\classa; use some\namespace\classb; use some\namespace\classc as c; use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c; use const some\namespace\consta; use const some\namespace\constb; use const some\namespace\constc; // 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教程》
以上就是一起看看php7新特性的详细内容。
