未列出的保留字?

时间:2009-07-23 16:38:20

标签: php return-value

我今天在一些PHP代码中遇到了一个非常奇怪的行为。我们有一个处理文件的类。它是这样的:

class AFile {

 //usual constructor, set and get functions, etc.
 //...

  public function save() {
    //do some validation
    //...

    if($this->upload()) { //save the file to disk
      $this->update_db(); //never reached this line
    }
  }

  private function upload() {
     //save the file to disk
     //...
     return ($success) ? true : false;
  }
}

对我们来说看起来很正常,但$ this-> upload()函数从未返回任何除NULL之外的内容。我们检查了正确的函数是否正在运行。我们在返回之前回复了它的返回值。我们只尝试返回一个真值或一个字符串。一切都正常。但$ this->上传仍然评估为NULL。此外,日志中没有任何内容,ERROR_ALL已打开。

我们恼怒地将函数名称更改为foo_upload。突然间一切都奏效了。 “上传”不在PHP reserved words列表中。任何人都有任何想法为什么名为“upload”的类函数会失败?

2 个答案:

答案 0 :(得分:2)

确保upload方法末尾的return语句是该方法中唯一的return语句。

答案 1 :(得分:1)

“调用”上传时获取null的一种方法是,如果你有这个(尝试访问一个不存在的属性):

if($a = $this->upload) { // => NULL
  $this->update_db(); //never reached this line
}
var_dump($a);

而不是(来自OP)(尝试调用现有方法):

if($a = $this->upload()) { // => true or false
  $this->update_db(); //never reached this line
}
var_dump($a);

您是否检查过您没有忘记()

如果不是这样,请尝试将error_reporting设置为E_ALL,并显示错误:

ini_set('display_errors', true);
error_reporting(E_ALL);

(你说“ERROR_ALL已开启”,所以不确定这是你的意思)