2009-07-23 79 views
5

今天我在一些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-> upload仍然評估爲NULL。另外,日誌中沒有任何內容,並且ERROR_ALL處於打開狀態。

在憤怒中,我們將函數名稱更改爲foo_upload。突然間一切都奏效了。 「上傳」不在PHP reserved words的列表中。任何人有任何想法,爲什麼名爲「上傳」的類功能會失敗?

+0

你把上傳功能裏面的回聲? – 2009-07-23 16:43:02

+0

它可能被重寫的地方? – Greg 2009-07-23 16:47:52

+0

@Chacha:我們確實在上傳函數中放入了一個回聲。它給出了預期值。 @Greg:AFile類沒有子類(尚未),所以它的方法不應該被覆蓋。 – dnagirl 2009-07-23 16:58:15

回答

1

一種方式來獲得空當「呼籲」上傳是,如果你有這個(試圖訪問一個inexisting屬性):

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是」,所以不知道這是你的意思)

2

確保上傳方法結束時的return語句是該方法中唯一的return語句。