我今天在一些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”的类函数会失败?
答案 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已开启”,所以不确定这是你的意思)