一起看看php7新特性-PHP7

资源魔 47 0

一、PHP 标量类型与前往值类型申明

二、PHP NULL 兼并运算符

三、PHP 太空船运算符(组合比拟符)

四、PHP 常量数组

五、PHP 匿名类

六、PHP Closure::call()

七、PHP 过滤 unserialize()

八、PHP IntlChar()

九、PHP CSPRNG

十、PHP 7 异样

十一、PHP 7 use 语句

十二、PHP 7 谬误解决

1三、PHP intp() 函数

1四、PHP 7 Session 选项

1五、PHP 7 烧毁特点

1六、PHP 7 移除了的扩大

1七、PHP 7 移除了的 SAPI

PHP 标量类型与前往值类型申明

  • 标量类型申明

    强迫模式

declare(strict_types=1)
  <?php 
// 强迫模式 
function sum(int ...$ints) 
{ 
   return array_sum($ints); 
} 
print(sum(2, '3', 4.1)); 
?>

以上顺序执行输入后果为:

9复制代码
  • 严格模式

<?php 

declare(strict_types=1); 

function sum(int ...$ints) 
{ 
   return array_sum($ints); 
} 

print(sum(2, '3', 4.1)); 
?>
以上顺序因为采纳了严格模式,以是假如参数中呈现没有适整数的类型会报错,执行输入后果为:

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种办法是同样的

  • 如下是实例:

    <?php
// 猎取 $_GET['site'] 的值,假如没有存正在前往 '低压锅'$site = $_GET['site'] ?? '低压锅';print($site);print(PHP_EOL); // PHP_EOL 为换行符


// 以上代码等价于$site = isset($_GET['site']) ? $_GET['site'] : '低压锅';print($site);print(PHP_EOL);
// ?? 链$site = $_GET['site'] ?? $_POST['site'] ?? '低压锅';print($site);
?>复制代码

组合比拟符,又称太空船运算符

PHP 7 新添加的太空船运算符(组合比拟符)用于比拟两个表白式 $a 以及 $b,假如 $a 小于、等于或年夜于 $b时,它辨别前往-一、0或1。

如下是实例

<?php
// 整型比拟print( 1 <=> 1);print(PHP_EOL);print( 1 <=> 2);print(PHP_EOL);print( 2 <=> 1);print(PHP_EOL);print(PHP_EOL); // PHP_EOL 为换行符

// 浮点型比拟print( 1.5 <=> 1.5);print(PHP_EOL);print( 1.5 <=> 2.5);print(PHP_EOL);print( 2.5 <=> 1.5);print(PHP_EOL);print(PHP_EOL);

// 字符串比拟print( "a" <=> "a");print(PHP_EOL);print( "a" <=> "b");print(PHP_EOL);print( "b" <=> "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 来实例化一个匿名类,这能够用来代替一些"用后即焚"的完好类界说。

  • 如下是实例:

        <?php 
        interface Logger { 
           public function log(string $msg); 
        } 
        
        class Application { 
           private $logger; 
        
           public function getLogger(): Logger { 
              return $this->logger; 
           } 
        
           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() 有着更好的功能,将一个闭包函数静态绑定到一个新的工具实例并挪用执行该函数。

实例
<?php 
class A { 
    private $x = 1; 
} 

// PHP 7 以前版本界说闭包函数代码 
$getXCB = function() { 
    return $this->x; 
}; 

// 闭包函数绑定到类 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.assertions11.天生以及执行代码 (开发模式)
0.天生代码,但正在执行时跳过它
-1.没有天生代码 (消费环境)
assert.exception01.断言失败时抛出,能够抛出异样工具,假如不提供异样,则抛出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 -:2
Stack 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新特点的具体内容,更多请存眷资源魔其它相干文章!

标签: php 后端 php7开发教程 php7开发资料 php7开发自学 安全 Markdown

抱歉,评论功能暂时关闭!