PHP () boş için sihirli işlevi nedir?

4 Cevap php

isset() empty() olarak aynı şey değildir çünkü, __isset olmamalı

4 Cevap

O dediği gibi this page:

__isset() is triggered by calling isset() or empty() on inaccessible properties.

Boş için hiçbir özel sihirli yöntemi (orada)

__ Isset () döndürür true, boş () sonra özelliğinin değerini kontrol etmek __ get () çağırmak olacaktır.

Inspire'ın cevap ek olarak:

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";

çıktıdır

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

meaning for the first property (foo) empty() only invoked __isset() which returned false -> empty($foo->foo)===true
For the second property (bar) __isset() was invoked and it returned true. Then the property is fetched via __get() and interpreted as a boolean value (see http://docs.php.net/language.types.type-juggling). And since (bool)0 is false, empty() also returns true for empty($foo->bar)

Ben genel olarak aşağıdaki PHP eşdeğer olduğunu göreceksiniz düşünüyorum:

isset($variable[0])

Örneğin, değişken bir dize ise, bu dize boş olduğunu tespit ediyorum. (Hepsi değilse de) en ilkel türleri için benzer çalışacak.

Bir sınıf değişkeni varsa sadece test ediyorsanız property_exists() sizin için çalışmıyor?