PHP の ?:、??、isset、empty は何を意味しますか?

醉折花枝作酒筹
リリース: 2023-03-11 17:46:02
転載
2107 人が閲覧しました

個人的には、PHPの変数の有無を判定する構文設計が失敗していると感じています。分業が曖昧で境界が曖昧で、判定に抜け穴が残りやすいです。嫌いです。このように機能がたくさんあるように見えて曖昧な設計ですが、これは PHP が弱い型付け言語であることに起因するものではなく、実装者の問題です。今日は楽しいものをいくつか紹介します。

PHP の ?:、??、isset、empty は何を意味しますか?

#isset

変数が設定されているか、null ではないかを確認します。

isset ( mixed $var , mixed $... = ? ) : bool
ログイン後にコピー

  • 一度に複数のパラメータが渡された場合、各パラメータは左から右にIssetで判定され、変数が渡されなかった場合は即停止します。

  • isset() は変数でのみ使用できます。他の引数を渡すと解析エラーが発生するためです。

  • 定数が設定されているかどうかを確認したい場合は、define() 関数を使用できます。

  • 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 が存在し、空でもゼロでもない値の場合は 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
ログイン後にコピー
概要

存在するかどうかを確認します: isset、??
  • 存在しないか空であるかどうかを判断します: empty()
  • それが空であるかどうかを判断します。存在するかどうかを確認します:!、?:
  • 推奨される学習:
  • php ビデオ チュートリアル

以上がPHP の ?:、??、isset、empty は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート