関数に見えて言語構文な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ってシンボルテーブル見にいくからだね。
「その変数が存在しているか、定義しているか」も見るから変数指定してあげなきゃだめなのよね。
で、シンボルテーブル見に行くから言語構文なのよね。
久々に納得。