15

ここで何かが足りない気がします。私はempty()、変数が空かどうかを判断するために、かなり長い間 PHP の関数を使用してきました。オブジェクトのプロパティが空かどうかを判断するために使用したかったのですが、どういうわけか機能しません。問題を説明するための単純化されたクラスを次に示します

// The Class 
class Person{
    private $number;

    public function __construct($num){
        $this->number = $num;
    }

    // this the returns value, even though its a private member
    public function __get($property){
        return intval($this->$property);
    }
}

// The Code    
$person = new Person(5);

if (empty($person->number)){
    echo "its empty";
} else {
    echo "its not empty";
}

したがって、基本的に、$personオブジェクトの数値プロパティには値 (5) が必要です。ご想像のとおり、問題は php が「その空」をエコーすることです。しかし、そうではありません!!!

ただし、プロパティを変数に格納してから評価すると機能します。

では、オブジェクト プロパティが空かどうかを判断する最善の方法は何でしょうか? ありがとうございました。

4

3 に答える 3

25

__isset()マジック メソッドを実装する必要があります。

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

public function __isset($property){
    return isset($this->$property);
} 
于 2012-08-02T03:22:38.393 に答える
4
if (empty(($person->number)))

/* OR */

if (!isset($person->nothing) || empty(($person->nothing)))

Object->Property 値を () で囲むと、空を呼び出す前に強制的に評価されます。

于 2016-05-19T20:32:22.227 に答える
1

戻り値がnull代わりかどうかを確認します。正しい答えを教えてくれるはずです。

于 2012-08-02T03:21:18.393 に答える