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
リンク元
- 33 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331028007411&ved=0CDAQFjAB&url=http://d.hatena.ne.jp/gen0_0/20110122/1295706724&ei=JOBVT8WZMMjymAWwh8HLCQ&usg=AFQjCNFeWFuBL0A3GSW_n9Fr76qnFlmxXw&sig2=2wGchxAXKB7MxqyJMF_fgQ
- 24 http://www.google.co.jp/url?sa=t&rct=j&q=さくらvps rvm エラー&source=web&cd=2&ved=0CCIQFjAB&url=http://d.hatena.ne.jp/gen0_0/20110420/1303310187&ei=sL6oTpnZOJDyrQf0uuW_CQ&usg=AFQjCNFsOa1GtRoVGXg50v
- 22 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331288871206&sqi=2&ved=0CCoQFjAA&url=http://d.hatena.ne.jp/gen0_0/20110125/1295987729&ei=HdtZT_mFBImKmQXiqI2lDw&usg=AFQjCNHoXqCqy8Fv334oXSyJ-iC0ezGxhg&sig2=ZFUAVVUOr6WEjNR2a
- 18 http://ezsch.ezweb.ne.jp/search/?query=赤ずきんと健康+画像&start-index=6&adpage=3&ct=1301&sr=0000&t=20110813183055&filter=1
- 17 http://gen.sh/
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=うそです aa&source=web&cd=9&ved=0CGcQFjAI&url=http://d.hatena.ne.jp/gen0_0/20110401/1301663409&ei=WMSoTt7tC6jKmQXYvKDfBg&usg=AFQjCNFerc42YCSha6mehjE0fayJRnf9mg
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=could not find main page readme.txtcould not find main page readme.txtcould not find main page readme.txtcould not find main page readme.txt&source=web&cd=1&ved=0CCEQFjAA&url
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=rails devise controller&source=web&cd=3&sqi=2&ved=0CC4QFjAC&url=http://d.hatena.ne.jp/gen0_0/20110125/1295987729&ei=k9uzTvXiLtGWmQXk1OTWDg&usg=AFQjCNHoXqCqy8Fv334oXSyJ-iC0ezGxhg&sig2=jHzYy0VvLBb38II
- 15 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cts=1331277935092&ved=0CDwQFjAC&url=http://d.hatena.ne.jp/gen0_0/20110516/1305504517&ei=bLBZT6XTGK_UmAXhp6S6Dw&usg=AFQjCNHSb51zNYTI-putyl2S9sAcbP6wKg&sig2=SBU7emhMiIe6icnpJ9M7FA
- 15 http://www.google.co.jp/url?sa=t&rct=j&q=devise コントローラ&source=web&cd=1&ved=0CC4QFjAA&url=http://d.hatena.ne.jp/gen0_0/20110125/1295987729&ei=-4WoTvrZCI3MmAXBxpmzDw&usg=AFQjCNHoXqCqy8Fv334oXSyJ-
