Было бы неправильно, если бы file_exists был разработан, чтобы возвращать путь вместо TRUE? - PullRequest
0 голосов
/ 10 марта 2011

Функция file_exists возвращает TRUE в случае успеха, но я думаю, что было бы более полезно, если бы вместо TRUE она возвращала значение переданного $filename.Неужели я так не думаю?

Если бы функция была разработана таким образом, мы могли бы использовать:

$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 ]

5 голосов
/ 10 марта 2011

Я не понимаю, почему это будет улучшением.Учтите, что:

  1. На практике вы поместите вызов file_exists в условие, поэтому больше не будет $success переменной
  2. Имя file_exists предрасполагает читателякода, что функция будет возвращать ответ да / нет (логическое значение)

Итак, в заключение я думаю, что было бы плохой идеей ничего не менять, кроме типа возвращаемого значения.

4 голосов
/ 10 марта 2011

file_exists?это в основном вопрос да или нет, поэтому он дает ответ да или нет (логический).

Файл существует?«Да», он существует.

Так что он удачно назван для того, что он делает

3 голосов
/ 10 марта 2011

Это просто не имеет смысла.Он также может возвращать права доступа к файлу, размер файла, дату последнего изменения, и все же он будет иметь такой же смысл, как и имя файла.Это не что иное, как проверка, которая дает логическое значение, и вы можете принимать решения на его основе.

Кстати, я не получаю ваши примеры, что может быть проще, чем:

$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 голосов
/ 10 марта 2011

Ну, на самом деле, ничто не мешает вам написать эту функцию:

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

Это ИМХО проблематично, так как имеет несколько типов возврата и не дает вам больше информации, чем вы получили бы от file_exists() - и, следовательно, хуже, чем бессмысленно; но можно так выстрелить себе в ногу, если вы действительно этого хотите.

(такое поведение вряд ли будет модифицировано в file_exists() по причинам, указанным здесь и в других ответах)

1 голос
/ 10 марта 2011

Тогда какая польза от 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, 
}
...