2016-06-02 3 views
1

У меня есть файл php, где я использую, если statments и я вызываю этот файл через ajax .. onSuccess дает мне результат, если файл загружен успешно или ошибка.после раннего возвращения делает следующий код execute

код выглядит следующим образом:

if(empty($_FILES['file']['name'])){ 
    return "no image was selected"; 
} 
if($two_many_images){ 
    return "Only x images are alowed to upload"; 
} 
if($size>2014522){ 
    return "Size error"; 
} 
foreach($_FILES["file"]['tmp_name'] as $key=>$imgLocation){ 
    uploadImage($_FILES["fileToUpload"]['tmp_name'][$key], $imgLocation); 
} 

Вопрос: В первом случае условие Постулаты верно, Виль мой второй, если Постулаты выполнить?

+0

нет, возвращение выходит исполнение в этой области видимости, (функция/метод) – ArtisticPhoenix

+0

Потому что после возвращения типа каждая вещь исчезла – Saty

+0

так вы имеете в виду мое второе условие не будет выполняться? – Aryan

ответ

1

Это можно легко продемонстрировать, например, у вас есть функция:

funciton foo(){ 
    echo "foo\n"; 
    return; 
    echo 'bar'; 
} 

если вы звоните

foo(); 

Он распечатает

foo 

Но не bar. После того, как указатель выполнения попадает в ответ, он вернется обратно туда, откуда был вызван foo(). Это также можно легко показать.

foo(); 
foo(); 
foo(); 

Печать

foo 
foo 
foo 

UPDATE: основаны от ваших комментариев правильный способ делать то, что вы хотите, это

if(empty($_FILES['file']['name'])){ 
    echo "no image was selected"; 
    exit(); 
} 
if($two_many_images){ 
    echo "Only x images are alowed to upload"; 
    exit(); 
} 
if($size>2014522){ 
    echo "Size error"; 
    exit(); 
} 
foreach($_FILES["file"]['tmp_name'] as $key=>$imgLocation){ 
    uploadImage($_FILES["fileToUpload"]['tmp_name'][$key], $imgLocation); 
} 

Я использую exit() вместо возвращения, потому что это более удобным для чтения и имеет смысл, хотя в вашем случае возврат имеет тот же эффект. Exit полностью завершит выполнение для php, что действительно то, что вы хотите. Вы также можете сделать что-то вроде

die('Message'); 

Или

exit('Message'); 

Как хорошо, который будет выйти и вывести сообщение. Они все почти такие же ... Я положил echo сначала только потому, что мне всегда было немного грязно, чтобы положить вещи в выход. Не знаю, почему это так, может быть, я привязываю его к непреднамеренному поведению из-за того, что die() так сильно находится в верхней части файлов, которые не предназначены для запуска вне рамки. Но я отвлекся.

Как раз для полноты, основанной на ваших комментариях, если вы вызываете возврат из глобальной области действия в PHP, у нее нет места для возврата, поэтому выполнение просто останавливается в этой точке. Причина, по которой лучше использовать exit или die, заключается в том, что возврат имеет совершенно иное поведение, которое заключается в «возврате» данных из вызова функции. Таким образом, более читаемо использовать метод, поведение которого лучше всего соответствует тому, что вы хотите. Это завершение выполнения текущего скрипта (экземпляр PHP).

+0

в функции, которую я тестировал, он работает, как вы сказали, но я спрашиваю про весь файл – Aryan

+0

, он просто заканчивается исполнением, вы не получите ответ возврата в этом случае, вам нужно сначала «эхо», а затем сделать 'return'; – ArtisticPhoenix

+0

Wow down down? действительно? Я имею в виду серьезно. Вы могли бы по крайней мере поставить причину для downvote, это не отвечает на вопрос. На самом деле я вышел за рамки этого и дал рекомендации по лучшей практике. – ArtisticPhoenix

0

Нет, ваш второй оператор не будет выполнен. Когда вызывается возврат, остальная часть кода не будет выполнена. В документации по PHP написано:

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

+0

@thanks для ответа .. теперь я кое-что знаю;) – Aryan

Смежные вопросы