개인적으로는 변수의 존재 여부를 판단하는 PHP의 문법적 디자인이 실패했다고 생각합니다. 업무 분담이 불분명하고 경계가 불분명하여 판단에 허점을 남기기 쉽습니다. 기능이 많은 것 같지만 모호한 디자인은 PHP가 약한 타입의 언어라고 할 수 없고 구현하는 사람의 문제입니다. 오늘은 재미있는 것들을 소개하겠습니다.
isset
변수가 설정되어 있고 null이 아닌지 감지합니다.
isset ( mixed $var , mixed $... = ? ) : bool
한 번에 여러 매개변수가 전달되면 각 매개변수는 왼쪽에서 오른쪽으로 Isset에 의해 판단됩니다. , 중간 어딘가에 변수가 통과하지 못하면 즉시 중지됩니다.
isset()은 변수와 함께만 사용할 수 있습니다. 다른 매개변수를 전달하면 구문 분석 오류가 발생하기 때문입니다.
상수가 설정되었는지 확인하려면 정의된() 함수를 사용할 수 있습니다.
isset()을 사용하여 객체의 액세스할 수 없는 속성을 확인하는 경우 __isset() 메서드가 정의되면 이 오버로드된 메서드가 호출됩니다.
unset()]을 사용하여 변수가 해제된 경우 더 이상 isset()이 아닙니다.
정의되지 않은 변수는 구문 오류를 보고하지 않습니다.
<?php function tt() { } $a = null; $b = 0; $c = []; var_dump(isset($a)); // false var_dump(isset($b)); // true var_dump(isset($c)); // true var_dump(isset($c['name'])); // false var_dump(isset($d)); // false var_dump(isset($a, $b, $c, $d)); // false // var_dump(isset("abc")); // 语法错误 // var_dump(isset(tt())); // 语法错误 // var_dump(isset(MY_CONST)); // 语法错误
객체의 변수를 확인하는데 안전하게 사용할 수 있습니다.
// instead of writing isset($abc) && isset($abc->def) && isset($abc->def->ghi); // or in a shorter form isset($abc, $abc->def, $abc->def->ghi); // you can just write isset ($abc->def->ghi);
empty()
변수가 존재하지 않는지, 비어있는지 판단하세요.
empty ( mixed $var ) : bool
정의되지 않은 변수는 구문 오류를 보고하지 않습니다.
매개변수는 반드시 변수일 필요는 없습니다.
empty()는 본질적으로 !isset($var) || $var == false와 동일합니다.
var가 존재하고 비어 있지 않고 0이 아닌 값이면 false를 반환하고, 그렇지 않으면 true를 반환합니다.
보이지 않는 객체 속성에 empty()를 사용하면 __isset() 메서드가 있으면 호출됩니다.
<?php function tt() { } $a = null; $b = 0; $c = []; var_dump(empty($a)); // true var_dump(empty($b)); // true var_dump(empty($c)); // true var_dump(empty($c['name'])); // true var_dump(empty($d)); // true var_dump(empty("abc")); // false var_dump(empty(tt())); // true // var_dump(empty(MY_CONST)); // 语法错误
!
비어 있는지 확인하세요. 정의되지 않은 변수는 PHP 알림을 보고하고 구문 오류는 보고되지 않으며 프로그램이 종료되지 않는지 여부도 확인할 수 있습니다.
<?php function tt() { } $a = null; $b = 0; $c = []; var_dump(!$a); // true var_dump(!$b); // true var_dump(!$c); // true var_dump(!$c['name']); // true PHP Notice: Undefined index: name var_dump(!$d); // true PHP Notice: Undefined index: name var_dump(!("abc")); // false var_dump(!tt()); // true // var_dump(!MY_CONST); // 语法错误
?:
삼항 연산자의 약어입니다.
$c['name'] ?: 10 等价于 !$c['name'] ? 10 : $c['name']
그래서 판단의 근거는 여전히 비어 있는지 판단하는 것입니다. 정의되지 않은 변수는 PHP 알림을 보고하고 구문 오류는 보고되지 않으며 프로그램이 종료되지 않는지 여부도 확인할 수 있습니다.
??
$a ?? 10 等价于 isset($a) ? $a : 1
Induction
존재 여부 판단: isset, ??
존재하지 않는지, 비어 있는지 판단: 비어 있음()
여부 판단 비어 있음, 권장되지 않음 존재 여부를 확인하는 데 사용: !, ?:
권장 학습: php 비디오 튜토리얼
위 내용은 PHP의 ?:, ??, isset 및 비어 있음은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!