> 백엔드 개발 > PHP 튜토리얼 > PHP의 널 병합 연산자에 대한 자세한 설명

PHP의 널 병합 연산자에 대한 자세한 설명

WBOY
풀어 주다: 2016-07-29 09:08:22
원래의
930명이 탐색했습니다.

Null 병합 연산자를 사용하면 매개변수를 쉽게 가져오고 매개변수가 비어 있을 때 기본값을 제공할 수 있다는 점이 좋습니다. 예를 들어, js에서는 ||를 사용하여 다음을 수행할 수 있습니다.

function setSomething(a){
  a = a || 'some-default-value';
  // ...
}
로그인 후 복사

그러나 PHP에서는 불행하게도 PHP의 ||가 항상 true 또는 false를 반환하므로 이와 같이 수행할 수 없습니다.

PHP7에 공식적으로 다음 연산자가 추가되었습니다:

// 获取user参数的值(如果为空,则用'nobody')
$username = $_GET['user'] ?? 'nobody';
// 等价于:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
로그인 후 복사

PHP7이 프로덕션 환경에서 사용되기까지는 오랜 시간이 걸릴 것으로 예상되므로 현재 상황에서 PHP5에 대안이 있습니까?

연구에 따르면 매우 편리한 대안이 있습니다.

// 获取user参数的值(如果为空,则用'nobody')
$username = @$_GET['user'] ?: 'nobody';
// 等价于:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
로그인 후 복사

-- 다음 코드를 실행하세요: https://3v4l.org/aDUW8

눈을 크게 뜨고 보면 이전 PHP7 예제와 유사하며 주로 ??를 ?:로 대체합니다. 이게 대체 뭐야? 실제로 이것은 (expr1) ? (expr2) : (expr3) 표현식의 생략 패턴입니다:

표현식 (expr1) ? (expr2) : (expr3) expr1이 TRUE로 평가되면 값은 expr2입니다. , expr1이 FALSE로 평가되는 값은 expr3입니다.

PHP 5.3부터 삼항 연산자의 중간 부분을 생략할 수 있습니다. expr1 ?: expr3 표현식은 expr1이 TRUE로 평가되면 expr1을 반환하고 그렇지 않으면 expr3을 반환합니다.

-- http://php.net/manual/zh/언어.operators.comparison.php

물론 이 대안은 완벽하지 않습니다. - if $_GET If there 'user'가 없으면 주의: 정의되지 않은 인덱스: 사용자라는 오류가 발생하므로 @를 사용하여 이 오류를 억제하거나 E_NOTICE 오류를 꺼야 합니다.

ps: PHP7 null 병합 연산자는 isset()과 작별을 고합니다

이전 작성 방법

$info = isset($_GET['email']) ? $_GET['email'] : ‘noemail';
로그인 후 복사

이제는 이렇게

$info = $_GET['email'] ?? noemail;
로그인 후 복사

이렇게 써도 되고 이렇게도 써도 됩니다

$info = $_GET['email'] ?? $_POST['email'] ?? ‘noemail';
로그인 후 복사

위에서는 PHP의 널 병합 연산자에 대한 자세한 설명을 그 측면을 포함하여 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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