2011-03-10 14 views
0

file_exists函數成功返回TRUE,但我認爲它會更有用,如果不是隻是TRUE,而是返回通過的$filename的值。我錯了嗎?如果「file_exists」被設計爲返回一個路徑而不是TRUE,會出錯嗎?

如果該功能的目的是這樣,我們就可以使用:

$file = file_exists("dir/file.ext"); 

if($file) 
{ 
    // do something 
} 

...而不是更復雜的:

$file = "dir/file.ext"; 

$success = file_exists("dir/file.ext"); 

if($success) 
{ 
    // do something 
} 

回答

5

我不明白爲什麼這樣做是一種改進。考慮到:

  1. 在實踐中,你將會把file_exists電話的條件內,因此不會有額外的$success變量
  2. 名稱file_exists易患代碼的閱讀器,該函數將返回一個是/否回答(布爾值)

因此,總而言之,我認爲改變返回值的類型是一個壞主意。

+0

好點,不過,那會是什麼傷害,如果它返回傳遞的文件路徑,而不是TRUE的? – 2011-03-10 10:26:53

+0

@Emanuil:這取決於它將返回的文件是否存在。我不能*認爲現在會造成傷害的一個例子(主要是因爲PHP是鬆散類型的),但我肯定有一些程序員不知道'file_exists'確實會做什麼,並且會很開心發明一些方法來打破它。 – Jon 2011-03-10 10:30:55

1

那麼使用fopen會怎樣?

$res = fopen("my/path.txt"); 
if ($res===FALSE) { 
    // File does not exists or an error while opening 
} 

如果您特別想知道文件是否存在,file_exists函數會執行它應該執行的操作。

if (FALSE===file_exists("my/path.txt")) { 
    // Stop here, 
} 
4

file_exists?基本上是一個是或否的問題,所以它給出了一個是或否(布爾)答案。

該文件是否存在? 「是」,它存在。

所以它恰當地命名爲它做什麼

3

那也只是毫無意義。它還可以返回文件許可權,文件大小,最後修改日期,並且仍然會使文件名更具有意義。這只不過是一個給出布爾值的檢查,你可以根據它做出決定。

順便說一句,我不明白你的例子,有什麼能比更簡單:

$file = "dir/file.ext"; 
if(file_exists($file)) 
{ 
    // do something with $file 
} 

或者,如果你真的需要返回值以後,你可以這樣做:

$file = "dir/file.ext"; 
if($success=file_exists($file)) 
{ 
    // do something with $file 
} 
2

好吧,沒有什麼能阻止你寫這個功能:

function get_filename_if_exists($fname) { 
    return (file_exists($fname) ? $fname : FALSE); 
} 

它是恕我直言的問題,因爲它有多個返回類型,並沒有給你任何比你從file_exists()得到的更多信息 - 因此比毫無意義更糟糕;但如果你真的想要,可以像這樣在腳下拍攝自己。

(這種行爲是不可能得到改造成file_exists(),這裏所陳述的理由,並在其他的答案)

相關問題