Hatena::ブログ(Diary)

家畜にっき

2011-07-28

isset(), empty()と__isset(), ___get()の覚書

PHP 5.3.6

<?php
class Hoge {
    private $v = 1;
    public function __isset($v) {
        echo "called __isset()\n";
        return isset($this->v);
    }   
    public function __get($v) {
        echo "called __get()\n";
        return $this->v;
    }   
}

$hoge = new Hoge;

if ($hoge->moge) {
    echo "returned true\n";
}
echo "\n";

if (!$hoge->moge) {
   echo "returned true\n";
}
echo "\n";

if (isset($hoge->moge)) {
   echo "returned true\n";
}
echo "\n";

if (empty($hoge->moge)) {
   echo "returned true\n";
}

実行結果

# ($hoge->moge)
called __get()
returned true

# (!$hoge->moge)
called __get()

# (isset($hoge->moge))
called __isset()
returned true

# (empty($hoge->moge))
called __isset()
called __get()

empty()は__isset()が真かつ__get()が空の場合にのみtrueを返す。

前者二つは__isset()を完全にぶっとばして__get()をコールするため、__isset()が未定義の場合は、意図しない動作をする場合があるかもしんないねというメモ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gen0_0/20110728/1311874695
リンク元