PHP 7.1의 새로운 기능 한눈에 보기

黄舟
풀어 주다: 2023-03-05 12:10:01
원래의
1535명이 탐색했습니다.

Nullable 유형

Nullable 유형은 주로 매개변수 유형 선언 및 함수 반환값 선언에 사용됩니다.

주요 두 가지 형식은 다음과 같습니다.

<?phpfunction answer(): ?int  {   return null; //ok}function answer(): ?int  {
   return 42; // ok}function say(?string $msg) {
   if ($msg) {
       echo $msg;
   }}
로그인 후 복사

예제를 보면 이해하기 쉽습니다. 함수 매개변수의 유형을 나타내기 위해 ? 반환 값은 지정된 유형이거나 null 입니다.

이 방법은 인터페이스 함수 정의에도 사용할 수 있습니다.

<?php interface Fooable {    function foo(?Fooable $f);}
로그인 후 복사

그러나 한 가지 주의할 점은 함수 자체가 매개변수 유형을 정의하고 기본값이 없는 경우입니다. , nullable인 경우에도 생략할 수 없습니다. 그렇지 않으면 오류가 발생합니다. 다음과 같습니다:

<?php function foo_nullable(?Bar $bar) {} foo_nullable(new Bar); // 可行foo_nullable(null); // 可行foo_nullable(); // 不可行
로그인 후 복사

그러나 위 함수의 매개변수를 ?Bar $bar = null 형식으로 정의하면 세 번째 작성 방법도 가능합니다. = null은 실제로 ? 의 상위 집합과 동일하므로 null 허용 형식 매개 변수의 경우 null을 기본값으로 설정할 수 있습니다.


list의 대괄호 약어

PHP5.4 이전에는 array()를 통해서만 배열을 정의할 수 있다는 것을 알고 있습니다. 5.4 이후에 추가됨 []의 단순화된 표기(아직도 5자를 생략하는 것이 매우 실용적임).

<?php // 5.4 之前$array = array(1, 2, 3);$array = array("a" => 1, "b" => 2, "c" => 3); // 5.4 及之后$array = [1, 2, 3];$array = ["a" => 1, "b" => 2, "c" => 3];
로그인 후 복사

는 또 다른 질문으로 확장됩니다. 배열의 값을 다른 변수에 할당하려면 목록을 통해 달성할 수 있습니다.

<?php list($a, $b, $c) = $array;
로그인 후 복사

[의 약어를 통해서도 달성할 수 있나요? ] 모직물?

<?php [$a, $b, $c] = $array;
로그인 후 복사

및 다음 기능에서 언급되는 목록 지정 키:

<?php ["a" => $a, "b" => $b, "c" => $c] = $array;
로그인 후 복사

PHP7.1은 이 기능을 구현합니다. 다만, lvalue에 나타나는 []는 array의 약자가 아니고 list()의 약자라는 점에 유의해야 한다.


그러나 이것이 전부는 아닙니다. 새로운 list() 구현은 lvalue에 나타날 수 있을 뿐만 아니라 foreach 루프에서도 사용할 수 있습니다.

<?php foreach ($points as ["x" => $x, "y" => $y]) {    
var_dump($x, $y);
로그인 후 복사

그러나 구현 문제로 인해 list()와 []를 서로 중첩하여 사용할 수 없습니다.

<?php // 不合法
list([$a, $b], [$c, $d]) = [[1, 2], [3, 4]]; 
// 不合法
[list($a, $b), list($c, $d)] = [[1, 2], [3, 4]]; 
// 合法
[[$a, $b], [$c, $d]] = [[1, 2], [3, 4]];
로그인 후 복사

목록에 키를 지정할 수 있습니다

위에서 언급했듯이 new 키는 list() 구현에서 지정할 수 있습니다:

<?php $array = ["a" => 1, "b" => 2, "c" => 3];["a" => $a, "b" => $b, "c" => $c] = $array;
로그인 후 복사

이는

<?php $a = $array[&#39;a&#39;];$b = $array[&#39;b&#39;];$c = $array[&#39;c&#39;];
로그인 후 복사

와 동일합니다. 이전과의 차이점은 list()의 이전 구현이 다음과 동일하다는 것입니다. 키는 0, 1, 2, 3 뿐입니다. 순서는 조정할 수 없습니다. 다음 명령문을 실행하면

<?php list($a, $b) = [1 => &#39;1&#39;, 2 => &#39;2&#39;];
로그인 후 복사

오류가 발생합니다. PHP error: Undefine offset: 0... .

새 구현에서는 다음과 같은 방법으로 할당을 조정할 수 있습니다.

<?php list(1 => $a, 2 => $b) = [1 => &#39;1&#39;, 2 => &#39;2&#39;];
로그인 후 복사

배열과 달리 목록은 혼합 키를 지원하지 않습니다. 다음 작성은 구문 분석 오류를 유발합니다. >

<?php // Parse error: syntax error, ...list($unkeyed, "key" => $keyed) = $array;
로그인 후 복사

더 복잡한 상황의 경우 list는 복합 형식 구문 분석도 지원합니다:

<?php $points = [    
["x" => 1, "y" => 2],    
["x" => 2, "y" => 1]]; 
list(list("x" => $x1, "y" => $y1), list("x" => $x2, "y" => $y2)) = $points; 
$points = [    
"first" => [1, 2],    
"second" => [2, 1]]; 
list("first" => list($x1, $y1), 
"second" => list($x2, $y2)) = $points;
로그인 후 복사

및 루프에서 사용:

<?php $points = [    
["x" => 1, "y" => 2],    
["x" => 2, "y" => 1]]; 
foreach ($points as list("x" => $x, "y" => $y)) {    
echo "Point at ($x, $y)", PHP_EOL;}
로그인 후 복사

void return type

PHP7 .0은 다음을 추가합니다. 함수 반환 유형을 지정하는 기능이지만 반환 유형을 void로 지정할 수 없습니다. 7.1의 이 기능은 보충입니다:

<?php function should_return_nothing(): void {    return 1; // Fatal error: A void function must not return a value}
로그인 후 복사

다음 두 가지 상황을 모두 확인할 수 있습니다.

<?php function lacks_return(): void {    // valid} function returns_nothing(): void {    return; // valid}
로그인 후 복사

함수 반환 유형으로 정의된 void는 null을 반환하더라도 반환 값을 가질 수 없습니다:

<?php function returns_one(): void {    
return 1; // Fatal error: A void function must not return a value} 
function returns_null(): void {    
return null; // Fatal error: A void function must not return a value}
로그인 후 복사

또한 void는 반환 유형에만 적용 가능하고 매개변수 유형 선언에 사용할 수 없으며 그렇지 않으면 오류가 발생합니다. :

<?php function foobar(void $foo) { // Fatal error: void cannot be used as a parameter type}
로그인 후 복사

클래스 함수의 반환 유형 선언은 하위 클래스에 의해 재정의될 수 없습니다. 그렇지 않으면 오류가 발생합니다:

<?php class Foo{    
public function bar(): void {    
}
} 
class Foobar extends Foo{   
 public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void    }}
로그인 후 복사

클래스 상수 속성 설정

이 기능은 상대적으로 간단합니다. 즉, 클래스의 상수는 이제 공개, 비공개 및 보호 수정을 지원합니다.

<?php class Token {    
// 常量默认为 
public    const PUBLIC_CONST = 0;     
// 可以自定义常量的可见范围    
private const PRIVATE_CONST = 0;    
protected const PROTECTED_CONST = 0;    
public const PUBLIC_CONST_TWO = 0;     
// 多个常量同时声明只能有一个属性    
private const FOO = 1, BAR = 2;}
로그인 후 복사

또한 인터페이스의 상수는 공개 속성만 사용할 수 있습니다.

<?php interface ICache {    public const PUBLIC = 0;    const IMPLICIT_PUBLIC = 1;}
로그인 후 복사

변경 사항에 대처하기 위해 리플렉션 클래스의 구현이 그에 따라 풍부해졌고, 상수의 추가 속성을 얻기 위해 getReflectionConstant 및 getReflectionConstants라는 두 가지 메소드가 추가되었습니다.

<?php class testClass  {    
const TEST_CONST = &#39;test&#39;;
} 
$obj = new ReflectionClass( "testClass" );
$const = $obj->getReflectionConstant( "TEST_CONST" );
$consts = $obj->getReflectionConstants();
로그인 후 복사

다중 조건 잡기

과거 try...catch 문에서 각 catch는 하나의 조건부 판단만 설정할 수 있었습니다:

<?php try {    
// Some code...
} 
catch (ExceptionType1 $e) {    
// 处理 ExceptionType1} 
catch (ExceptionType2 $e) {    
// 处理 ExceptionType2} 
catch (Exception $e) {    // ...}
로그인 후 복사

새 구현에서는 하나의 catch에 여러 조건을 설정할 수 있습니다. or의 형태 판단:

<?php try {    
// Some code...} 
catch (ExceptionType1 | ExceptionType2 $e) {    
// 对于 ExceptionType1 和 ExceptionType2 的处理} 
catch (Exception $e) {    // ...}
로그인 후 복사
위 내용은 PHP 7.1의 새로운 기능 목록입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿