PHP 8의 Null 안전 연산자는 무엇이며 왜 PHP의 다음 대작입니까?

4970 단어 programmingphp
PHP는 느슨한 유형 시스템과 취약한 기술 설계로 인해 개발자들 사이에서 평판이 매우 좋지 않은 것으로 알려져 있습니다.
그러나 새로운 버전이 나올 때마다 PHP는 개발자의 인식을 바꾸고 있습니다.
PHP 7과 PHP 8의 최근 개선 사항은 Java, C++, Dart 등과 같은 언어에서만 볼 수 있는 많은 기능을 가져왔습니다.

PHP 8에서 가져온 기능/개선 사항 중 하나는 보다 쉬운 Null 안전입니다.


Null 안전은 Null 값으로 인한 프로그램 충돌이 널리 사용되기 때문에 프로그래밍에서 많은 의미를 갖습니다.

Null 안전 연산자란:




Null 안전 연산자는 PHP 8.0의 새로운 구문으로, PHP에 선택적 연결 기능을 제공합니다.

null-safe 연산자는 값이 null인 경우 오류를 발생시키지 않고 null-safe 연산자가 검색을 단락시키는 속성 및 메서드 반환 값 체인의 값을 읽을 수 있도록 합니다.

구문은 속성/메서드 액세스 연산자(->)와 유사하며 null 허용 유형 패턴을 따르는 null-safe 연산자는 ?->입니다.

$foo?->bar?->baz;


Null 안전 연산자는 왼쪽의 식이 null로 평가되는 경우 자동으로 null을 반환합니다.

class Customer {
    public function getAddress(): ?Address {}
}
class Address {
    public function getCountry(): string {}
}


$country = $customer->getAddress()->getCountry();



위 스니펫에서 Customer::getAddress() 메서드 반환 값은 null을 허용합니다. null 값 또는 Address 클래스의 개체를 반환할 수 있습니다.

$customer->getAddress()->getCountry() 체인은 getAddress의 반환 값이 null일 수 있고 PHP가 getCountry() 메서드를 호출하려고 할 때 오류를 발생시키기 때문에 "null safe"하지 않습니다.

Fatal error: Uncaught Error: Call to a member function getCountry() on null in ...:...


주소에 안전하게 접근하기 위해서는 반환 값에 더 접근하기 전에 null 반환 값을 확인하는 것이 필요했습니다.

$address = $customer->getAddress();
$country = $address ? $address->getCountry() : null;
$address = $customer->getAddress();
if ($address) {
    $country = $address->getCountry();
}
else {
    $country = null;
}


null-safe 연산자는 속성/메서드 액세스를 단락시키고 연산자의 왼쪽이 null인 경우 나머지 식을 실행하지 않고 즉시 null을 반환하여 이 문제를 해결합니다.

참조:



PHP 8 new Features .

좋은 웹페이지 즐겨찾기