搜索
首页后端开发PHP7一起看看php7新特性

一起看看php7新特性

Jun 22, 2020 pm 05:42 PM
markdownphp后端安全

一起看看php7新特性

1、PHP 标量类型与返回值类型声明

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
-1
1

0
-1
1

0
-1
1复制代码

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); 
?>
以上程序执行输出结果为:
1
1复制代码

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); 
?>
以上程序执行输出结果为:
1
2复制代码

注意 以上特性是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(&#39;zend.assertions&#39;, 0); 

assert(true == false); 
echo &#39;Hi!&#39;; 
?>
以上程序执行输出结果为:
Hi!
将 zend.assertions 设置为 1,assert.exception 设置为 1:
实例
<?php 
ini_set(&#39;zend.assertions&#39;, 1); 
ini_set(&#39;assert.exception&#39;, 1); 

assert(true == false); 
echo &#39;Hi!&#39;; 
?>
以上程序执行输出结果为:
Fatal error: Uncaught AssertionError: assert(true == false) in -:2
Stack trace:#0 -(2): assert(false, &#39;assert(true == ...&#39;)#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新特性的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:juejin.im。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版