6

クイック仕様:

PHP 5.3
error_reporting(-1) // the highest

__get()オブジェクト内の任意の深さの配列要素に魔法のようにアクセスするために、参照によるトリックを使用しています。

簡単な例:

public function &__get($key){
    return isset($this->_data[$key])
        ? $this->_data[$key]
        : null;
}

が設定されていない場合、これは機能しません。参照によって$key返そうとnullしますが、もちろんスローOnly variable references should be returned by reference ...されます。次のように変更してみました。

public function &__get($key){
    $null = null;
    return isset($this->_data[$key])
        ? $this->_data[$key]
        : $null;
}

それでも機能しませんが、その設定$nullnull本質的にそれであると想定してunset()います。

私に何ができる?ありがとう!


多少関連性があるので、この質問を宣伝したいと思いました(PHPの魔法と参照)。__callStatic()、call_user_func_array()、参照、および PHP 5.3.1。私はまだ答えを見つけていません... PHPコアを変更する以外に。

4

3 に答える 3

19

これは とは関係ありませんがnull、三項演算子とは関係ありません。

で書き換えてもif/else、通知はスローされません。

public function &__get($key)
{
    $null = null;
    if (isset($this->_data[$key])) {
        return $this->_data[$key];
    } else {
        return $null;
    }
}

三項演算子は参照にはなりません。のみを返すことができます。

于 2011-05-11T15:48:09.773 に答える
4

nullなぜ明示的に返すのですか?$key存在しない場合は、とにかく$this->_data返されますか?NULL

以下を使用して、反対側でロジックを調整することをお勧めします。あなたはおそらくすでにnull今のところチェックしています。empty()または他のバリアントに変更できます。または、 Matthieuの提案に従って例外を使用します。

public function &__get($key){
    return $this->_data[$key];
}
于 2011-05-11T15:47:21.587 に答える
4

私はこの問題を抱えていましたが、キーが見つからないときに null を返すのではなく、例外をスローするべきではないことに気付きました(結局、不明な属性にアクセスしていたため)。

しかし、それはあなたがやりたいことではないかもしれません。私はそれを共有したかっただけです.

于 2011-05-11T15:43:55.300 に答える