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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.