6

と同じものではないので__isset、そうではありませんisset()empty()

4

4 に答える 4

17

このページにあるように:

__isset() は、アクセスできないプロパティで isset() または empty() を呼び出すことによってトリガーされます。

empty() 専用のマジックメソッドはありません

__isset() が true を返す場合、empty() は __get() を呼び出してプロパティの値をチェックします。

于 2010-03-12T08:37:13.313 に答える
4

インスパイアの答えへの追加として:

class Foo {
  public function __isset($name) {
    echo "public function __isset($name)\n";
    return 'bar'===$name;
  }
  public function __get($name) {
    echo "public function __get($name)\n";
    return 'bar'===$name ? 0 : NULL;
  }
}

$foo = new Foo;
echo empty($foo->foo) ? ' empty' : ' not empty', "\n";
echo empty($foo->bar) ? ' empty' : ' not empty', "\n";

出力は

public function __isset(foo)
 empty
public function __isset(bar)
public function __get(bar)
 empty

最初のプロパティ(foo)の意味empty()はfalseを返した__isset()のみを呼び出しました-> empty($foo->foo)===true
2番目のプロパティ(bar)の場合__isset()が呼び出され、trueを返しました。次に、プロパティは__get()を介してフェッチされ、ブール値として解釈されます(http://docs.php.net/language.types.type-jugglingを参照)。また、(bool)0はであるためfalse、empty()はtrueempty($foo->bar)

于 2010-03-12T09:28:00.997 に答える
0

一般的には、以下が PHP と同等であることがわかると思います。

isset($variable[0])

たとえば、変数が文字列の場合、文字列が空であることを検出します。ほとんどのプリミティブ型 (すべてではないにしても) で同様に機能します。

于 2010-03-12T08:34:08.153 に答える
0

クラス変数が存在するかどうかをテストしているだけなら、うまくいきませんproperty_exists()か?

于 2010-03-12T08:44:40.413 に答える