>백엔드 개발 >PHP 문제 >PHP의 ?:, ??, isset 및 비어 있음은 무엇을 의미합니까?

PHP의 ?:, ??, isset 및 비어 있음은 무엇을 의미합니까?

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-07-20 16:29:102149검색

개인적으로는 변수의 존재 여부를 판단하는 PHP의 문법적 디자인이 실패했다고 생각합니다. 업무 분담이 불분명하고 경계가 불분명하여 판단에 허점을 남기기 쉽습니다. 기능이 많은 것 같지만 모호한 디자인은 PHP가 약한 타입의 언어라고 할 수 없고 구현하는 사람의 문제입니다. 오늘은 재미있는 것들을 소개하겠습니다.

PHP의 ?:, ??, isset 및 비어 있음은 무엇을 의미합니까?

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[&#39;name&#39;])); // 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[&#39;name&#39;])); // 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[&#39;name&#39;]); // 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[&#39;name&#39;] ?: 10 等价于 !$c[&#39;name&#39;] ? 10 : $c[&#39;name&#39;]

그래서 판단의 근거는 여전히 비어 있는지 판단하는 것입니다. 정의되지 않은 변수는 PHP 알림을 보고하고 구문 오류는 보고되지 않으며 프로그램이 종료되지 않는지 여부도 확인할 수 있습니다.

??

$a ?? 10 等价于 isset($a) ? $a : 1

Induction

  • 존재 여부 판단: isset, ??

  • 존재하지 않는지, 비어 있는지 판단: 비어 있음()

  • 여부 판단 비어 있음, 권장되지 않음 존재 여부를 확인하는 데 사용: !, ?:

권장 학습: php 비디오 튜토리얼

위 내용은 PHP의 ?:, ??, isset 및 비어 있음은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제