1

当我将网站从一台机器转移到另一台机器时,我感到非常恼火,并且出现了一堆错误,例如这种情况。但是这个引起了我的好奇心,这就是我问一个问题的原因。我有以下代码:

namsepace MF;
class Box {
    private static $dumpYard = array();

    public static function get($name) {
        return self::$dumpYard[$name];
    }

    public static function set($name, $value, $overwrite=false) {
        if($overwrite || !isset(self::$dumpYard[$name])){
            self::$dumpYard[$name] = $value;
        }else{
            if(DEBUG_MODE){
                echo('Value for "'.$name.'" already set in box, can\'t overwrite');
            }
        }
    }
}

因此,当我的应用程序到达本地测试服务器上的以下行时:

if(!empty(\MF\Box::get('requestsSpam'))){
    throw new \Exception('Please don\'t spam');
}

我收到一个致命错误:无法在写入上下文中使用函数返回值。但是,此代码不会在我网站的实际托管服务器上引发错误。怎么会这样?

4

1 回答 1

3

empty()仅适用于变量。它应该是:

$result = \MF\Box::get('requestsSpam');
if(!empty($result)){
    throw new \Exception('Please don\'t spam');
}

为什么?empty()是一种语言结构,而不是一种功能。它只适用于声明的变量,这就是它的设计方式,没有魔法。

于 2013-10-31T20:50:36.250 回答