0

我在 __isset 中的实际代码中遇到错误,但是当我访问“运行 php 在线网站”时,它可以工作。所以我不确定为什么它在我的代码中不起作用。

<?
class Test {

    private $args;

    public function __construct($args = array()) {
        $this->args = $args;
    }

    public function __isset($name) {
        return $this->args[$name]; //undefined index on my server (is fine on php site)
    }

    function prnt() {
        // echo isset($this->i) ? "set" : "notset"; --> works, both print 'set'
        echo isset($this->h) ? "set" : "notset";
    }

}
?>

然后我执行这个:

$test = new Test(array('i' => '1234'));
$test->prnt();
//result on php website: notset
//result on my website: Undefined index at the line shown above.

可能有用的信息:
我的服务器正在运行 php 5.1。
isset($this->var)发生在include我实际代码中的文件中。
只要变量存在(i如上),它显然有效。

4

2 回答 2

3

您正在尝试返回不存在的键的值,而不是使用返回键的测试结果array_key_exists

public function __isset($name) {
    return array_key_exists($name, $this->args);
}
于 2013-03-26T15:29:47.000 回答
3

您在每个环境中的错误报告设置是不同的。一种环境允许E_NOTICE水平错误通过,而另一种环境则阻止它们。

你应该这样做:

return array_key_exists($name, $this->args);
于 2013-03-26T15:30:11.080 回答