> 백엔드 개발 > PHP7 > php7의 새로운 기능을 살펴 보겠습니다.

php7의 새로운 기능을 살펴 보겠습니다.

coldplay.xixi
풀어 주다: 2023-02-17 16:06:01
앞으로
3508명이 탐색했습니다.

php7의 새로운 기능을 살펴 보겠습니다.

1. PHP 스칼라 유형 및 반환 값 유형 선언

2. PHP NULL 조합 연산자

3. PHP 우주선 연산자(조합 비교 연산자)

4. PHP 익명 클래스

6, PHP 클로저::call()

7, PHP 필터 unserialize()

8, PHP IntlChar()

9, PHP CSPRNG

10, PHP 7 예외

11, PHP 7 사용 문

12, PHP 7 오류 처리

13, PHP intp() 함수

14, PHP 7 세션 옵션

15, PHP 7 더 이상 사용되지 않는 기능

16, PHP 7 제거된 확장

17, PHP 7 제거된 SAPI

PHP 스칼라 유형 및 반환 값 유형 선언

    스칼라 유형 선언
  • Enforcement 모드

    declare(strict_types=1)
      <?php 
    // 强制模式 
    function sum(int ...$ints) 
    { 
       return array_sum($ints); 
    } 
    print(sum(2, &#39;3&#39;, 4.1)); 
    ?>
    
    以上程序执行输出结果为:
    
    9复制代码
    로그인 후 복사
  • strict 모드

    <?php 
    
    declare(strict_types=1); 
    
    function sum(int ...$ints) 
    { 
       return array_sum($ints); 
    } 
    
    print(sum(2, &#39;3&#39;, 4.1)); 
    ?>
    以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:
    
    PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
    로그인 후 복사
  • PHP NULL 병합 작업 기호

    이전 삼항 Operation
  •   $site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';复制代码
    로그인 후 복사
    이제 병합 연산자
  •   $site = $_GET['site'] ?? '菜鸟教程';复制代码
    로그인 후 복사
    위의 2가지 방법은 동일합니다
  • 다음은 예입니다.
  •     <?php
    // 获取 $_GET[&#39;site&#39;] 的值,如果不存在返回 &#39;高压锅&#39;$site = $_GET[&#39;site&#39;] ?? &#39;高压锅&#39;;print($site);print(PHP_EOL); // PHP_EOL 为换行符
    
    
    // 以上代码等价于$site = isset($_GET[&#39;site&#39;]) ? $_GET[&#39;site&#39;] : &#39;高压锅&#39;;print($site);print(PHP_EOL);
    // ?? 链$site = $_GET[&#39;site&#39;] ?? $_POST[&#39;site&#39;] ?? &#39;高压锅&#39;;print($site);
    ?>复制代码
    로그인 후 복사
  • combination Comparator, 우주선 연산자라고도 함

PHP 7에 새로 추가된 우주선 연산자(결합 비교 연산자)는 $a가 $b보다 작거나 같거나 큰 경우 $a와 $b 두 표현식을 비교하는 데 사용되며 각각 -1, 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은 "burn"인 일부 완전한 클래스 정의를 대체하는 데 사용할 수 있는 새 클래스를 통해 익명 클래스의 인스턴스화를 지원합니다. 사용 후".
  • 다음은 예입니다.
  •         <?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()은 더 나은 성능을 가지며 클로저를 변환합니다. 새 객체 인스턴스에 동적으로 바인딩되고 함수를 실행하기 위해 호출됩니다.
  • 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()

    assert()的应用  跟assert_option() 配合复制代码
    로그인 후 복사

    PHP 필터 unserialize()

  • PHP 7에는 unserialize()에 대한 필터링을 제공할 수 있는 기능이 추가되었습니다. 이는 불법 데이터의 코드 삽입을 방지하고 보다 안전한 역직렬화된 데이터를 제공할 수 있습니다.

  • **参数**
    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复制代码
    로그인 후 복사
    로그인 후 복사

  • 위 기능은 unserialize()
allowed_classes

PHP CSPRNG 의사 난수 생성기

PHP 7은 여러 CSPRNG 기능을 도입하여 암호화된 강력한 난수를 생성하는 간단한 메커니즘을 제공합니다. random_bytes() - 암호화로 보호된 의사 난수 문자열입니다.

php7 예외

PHP 7 예외는 이전 assert() 함수의 이전 버전과의 호환성 및 향상을 위해 사용됩니다. 프로덕션 환경에서 비용이 전혀 들지 않는 어설션을 활성화하고 사용자 지정 예외 및 오류를 발생시키는 기능을 제공합니다.
CSPRNG(암호적으로 안전한 의사 난수 생성기, 의사 난수 생성기).

random_int() - 암호화로 보호된 의사 난수 정수입니다.
요약하자면, 이제 Random_bytes()가 임의의 문자열을 생성한다는 점을 제외하면 원본 rand() 및 'mt_rand()'와 유사합니다.
🎜🎜호환성을 위해 이전 버전의 API가 계속 유지됩니다. 🎜🎜🎜🎜assert()는 이제 평가할 문자열이나 테스트할 부울이 아닌 첫 번째 인수가 표현식이 되도록 허용하는 언어 구성입니다. 🎜🎜🎜
// 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}; 
?>
로그인 후 복사
로그인 후 복사
🎜매개변수 유형도 있습니다🎜🎜🎜🎜🎜구성 항목🎜🎜기본값🎜🎜선택값🎜🎜🎜🎜🎜🎜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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿