PHP7의 새로운 기능


1. 코어

  • 그룹 사용 구문문을 추가했습니다. RFC: https://wiki.php.net/rfc/group_use_declarations
  • null 병합 연산자를 추가했습니다??. RFC: https://wiki.php.net/rfc/isset_ternary
  • 64비트 PHP7 문자열 길이는 2^31바이트를 초과할 수 있습니다.
  • Closure::call() 메서드를 추가했습니다.
  • 큰따옴표로 묶인 문자열과 heredocs에서는 u{xxxxx}를 사용하여 유니코드 문자를 선언하는 것을 지원합니다.
  • define()은 배열을 상수로 정의할 수 있습니다.
  • 병합 비교 연산자 <=>가 추가되었습니다. RFC: https://wiki.php.net/rfc/combined-comparison-operator
  • 연산자의 수익률을 추가했습니다. https://wiki.php.net/rfc/generator-delegation
  • Keywords는 특정 시나리오에서도 사용할 수 있습니다. RFC: https://wiki.php.net/rfc/context_sensitive_lexer
  • 스칼라 유형 선언 함수를 추가했습니다. RFC: https://wiki.php.net/rfc/scalar_type_hints_v5
  • 사용자 레이어에 안전하고 편리한 난수 생성기를 제공하는 인터페이스를 추가했습니다. RFC: https://wiki.php.net/rfc/easy_userland_csprng


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

스칼라 유형 선언#🎜 🎜#

기본적으로 모든 PHP 파일은 약한 유형 검사 모드에 있습니다.

PHP 7에는 스칼라 유형 선언 기능이 추가되었습니다. 스칼라 유형 선언에는 두 가지 모드가 있습니다:

    Force 모드(기본값) 엄격 모드 #### ## ## ## ## ## ## ########### ## ## ## ## 🎜🎜####### 수량 표시 유형 선언 구문 형식:
  • declare(strict_types=1);

  • strict_types 값(1 또는 0)이 코드에 지정되어 있으며 1은 엄격함을 나타냅니다. 유형 검사 모드, 함수 호출 및 반환 문에 적용됩니다. 0은 약한 유형 검사 모드를 나타냅니다.
  • 사용할 수 있는 유형 매개변수는 다음과 같습니다:

  • int

float# 🎜🎜#

bool

string
  • #🎜 🎜 #인터페이스#### ## ## #####array#### ## #####전화 가능한### ## ##### 🎜 🎜#

    강제 모드 예:
  • <?php
    // 强制模式
    function sum(int ...$ints)
    {
       return array_sum($ints);
    }
    print(sum(2, '3', 4.1));
    ?>

    위의 프로그램 실행 출력 결과는 다음과 같습니다.

    9
  • 인스턴스 요약은 매개변수 4.1을 정수 4로 변환하고 그런 다음 추가하십시오.
  • Strict 모드 예:
  • <?php
    // 严格模式
    declare(strict_types=1);
    
    function sum(int ...$ints)
    {
       return array_sum($ints);
    }
    
    print(sum(2, '3', 4.1));
    ?>

    위 프로그램은 strict 모드를 사용하므로 매개변수에 부적절한 정수형이 나타나면 오류가 발생합니다. 보고되고 실행됩니다. 출력은 다음과 같습니다.

  • PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
  • 반환 유형 선언
  • #🎜 🎜#PHP 7 함수 반환 값의 유형을 지정하는 반환 유형 선언에 대한 지원이 추가되었습니다.
  • 선언할 수 있는 반환 유형은 다음과 같습니다.

int

float# 🎜🎜#

bool

string


#🎜 🎜 #인터페이스#### ## ## #####array#### ## #####전화 가능한### ## ##### 🎜 🎜#

반환 유형 선언 예:

예제에서 반환 결과는 정수여야 합니다.

<?php
declare(strict_types=1);
function returnIntValue(int $value): int
{
   return $value;
}
print(returnIntValue(5));
?>

위 프로그램 실행 출력 결과는 다음과 같습니다.

5

반환 유형 선언 오류 예:

<?php
declare(strict_types=1);

function returnIntValue(int $value): int
{
   return $value + 1.0;
}

print(returnIntValue(5));
?>

엄격 모드로 인해 반환 값은 위 프로그램은 int여야 하는데 계산 결과가 float이므로 오류가 보고됩니다. 실행 출력은 다음과 같습니다.

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

②PHP NULL 병합 연산자

PHP 7 새로 추가된 NULL입니다. 병합 연산자(??)는 isset()을 실행하는 데 사용됩니다. 삼항 연산을 감지하는 단축키입니다.

NULL 병합 연산자는 변수가 존재하고 값이 NULL이 아닌지 확인합니다. 그렇다면 자체 값을 반환하고, 그렇지 않으면 두 번째 피연산자를 반환합니다.

삼항 연산자를 다음과 같이 작성했습니다:

$site = isset($_GET['site']) ? $_GET['site'] : 'PHP中文网';

이제 다음과 같이 직접 작성할 수 있습니다:

$site = $_GET['site'] ?? 'PHP中文网';

Example

<?php
// 获取 $_GET['site'] 的值,如果不存在返回 'PHP中文网'
$site = $_GET['site'] ?? 'PHP中文网';

print($site);
print(PHP_EOL); // PHP_EOL 为换行符

// 以上代码等价于
$site = isset($_GET['site']) ? $_GET['site'] : 'PHP中文网';

print($site);
print(PHP_EOL);
// ?? 链
$site = $_GET['site'] ?? $_POST['site'] ?? 'PHP中文网';

print($site);
?>

위 프로그램 실행의 출력 결과는 다음과 같습니다.

PHP中文网
PHP中文网
PHP中文网

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

PHP 7에 새로 추가된 우주선 연산자(결합 비교 연산자)는 $a와 $b라는 두 표현식을 비교하는 데 사용됩니다. 또는 $b보다 크면 각각 -1, 0 또는 1을 반환합니다. 인스턴스 상수 배열은 const를 통해 정의할 수 있고, PHP 7은 정의()를 통해 정의할 수 있습니다.

Example

<?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 Closure::call()PHP 7의 Closure::call()은 더 나은 성능을 가지며 동적으로 바인딩됩니다. 새로운 객체 인스턴스에 대한 클로저 함수를 호출하고 함수를 호출합니다.

Example

<?php// 使用 define 函数来定义数组define('sites', [
   'Google',
   'PHP',
   'Taobao']);print(sites[1]);?>

위 프로그램 실행의 출력 결과는 다음과 같습니다.

PHP

⑥PHP CSPRNG

CSPRNG(암호적으로 안전한 의사 난수 생성기, 의사 난수 생성기).

PHP 7은 여러 CSPRNG 기능을 도입하여 암호화된 강력한 난수를 생성하는 간단한 메커니즘을 제공합니다.

  • random_bytes() - 암호화로 보호된 의사 난수 문자열입니다.

  • random_int() - 암호화로 보호된 의사 난수 정수

random_bytes()

구문 형식

<?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);
?>

매개변수

  • 길이 - 무작위 숫자 문자열에 반환된 바이트 수입니다.

반환 값

  • 문자열을 반환하고 반환된 결과의 바이트 수를 나타내는 int 유형 입력 매개 변수를 허용합니다.

Instance

1
1

위의 프로그램 실행 출력 결과는 다음과 같습니다.

string random_bytes ( int $length )

random_int()

문법 형식

<?php
$bytes = random_bytes(5);
print(bin2hex($bytes));
?>

매개변수

  • min - 반환된 최소값은 PHP_INT_MIN보다 크거나 같아야 합니다.

  • max - 반환된 최대값은 PHP_INT_MAX 보다 작거나 같아야 합니다.

반환 값

  • 지정된 범위 내의 int 숫자를 반환합니다. ⑦ "사용 후 굽기"인 일부 완전한 클래스 정의를 대체하는 데 사용할 수 있습니다.

  • Example
6f36d48a29

위 프로그램 실행의 출력 결과는 다음과 같습니다.

int random_int ( int $min , int $max )

⑧PHP 7 사용 문

PHP 7은 사용을 사용하여 동일한 네임스페이스에서 클래스, 함수 및 상수를 가져올 수 있습니다.
<?php
print(random_int(100, 999));
print(PHP_EOL);
print(random_int(-1000, 0));
?>
2. Opcache 모듈

  • 파일 기반 보조 opcode 캐싱 메커니즘을 추가했습니다. php.ini 파일에서 opcache.file_cache=<DIR>을 설정할 수 있습니다. 서비스가 다시 시작되거나 SHM이 재설정될 때 두 번째 수준 파일 캐싱 메커니즘을 사용하면 성능이 향상될 수 있습니다.
  • opcache.file_cache_only=1을 설정하여 파일 캐시만 사용하도록 제한할 수도 있습니다.
  • opcache.file_cache_consistency_checks=0 매개변수를 설정하면 로딩 속도를 높일 수 있습니다.
  • opcache.huge_code_pages=0/1을 설정하여 PHP 코드 페이지를 거대한 페이지에 넣을지 여부를 결정할 수 있습니다. http://www.laruence.com/2015/10/02/3069.html
  • Windows 버전에는 opcache.file_cache_fallback=1 구성 항목이 추가되었습니다.

3. OpenSSL 모듈

에 "alpn_protocols" 옵션이 추가되었습니다.

4. Reflection

  • Trace, 현재 파일/줄 등의 산출물을 위한 ReflectionGenerator 클래스를 추가했습니다.
  • 새로운 반환 값과 스칼라 선언 함수를 더 효과적으로 지원하기 위해 ReflectionType 클래스를 추가했습니다.

5. 스트리밍

Windows 버전에는 블록 읽기 옵션이 추가되었습니다. array("pipe" => array("blocking" => true)) 매개변수를 전달하여 활성화할 수 있습니다.