関数に見えて言語構文なisset
いつものようにテキトーに書いてたらエラー出た件。
protected function _isCancel() { $testArg = $this->_getParam('cancel'); return ($this->_getParam('cancel') && isset($this->_getParam('cancel'))) ? true : false; }
こんなの書いたらエラー出た。
Fatal error: Can't use method return value in write context in path/to/phpfile.php on line xx
何が悪いんだと思ったら、どうやら
isset($this->_getParam('cancel'))
こいつの書き方が悪かったらしい。
なぜかと思って調べてみたら
http://pentan.info/php/empty_func.html
にempty関数を題材にして同じこと書いてあった。
issetは言語構文だからメソッド渡しちゃだめよ。ちゃんと変数わたしてあげてねって話。
言語構文だからっていう理由が最初わからなかったけど、考えてみたらissetってシンボルテーブル見にいくからだね。
「その変数が存在しているか、定義しているか」も見るから変数指定してあげなきゃだめなのよね。
で、シンボルテーブル見に行くから言語構文なのよね。
久々に納得。