Простой «возврат» в функции PHP просто заканчивает работу преждевременно?

Я только что видел это

// Check to see if the request is a XHR call if (request::is_ajax()) { // Send the 403 header header('HTTP/1.1 403 Forbidden'); return; } 

Я раньше не видел простого return , и я никогда не использовал его. Мое единственное предположение, что он просто действует так же, как любое return 'something' (остановка функции), за исключением того, что на самом деле не возвращает результат.

Кроме того, что произойдет в этой ситуации?

 function text($var) { if ( ! $var) { return; } do_something(); } $var = text(''); 

Я знаю, что это плохой пример (вероятно, он должен возвращать false или выдавать исключение), но будет ли это ошибкой или будет просто пустое или пустое значение?

 function text($var) { if ( ! $var) { return; } do_something(); } $var = text(''); echo gettype($var); echo is_bool($var) ? "true" : "false"; echo is_string($var) ? "true" : "false"; echo is_null($var) ? "true" : "false"; 

возвращает:

NULL false false true

PHP динамически типизирован, поэтому возврат значения не эквивалентен возврату нулевого значения в любом типе.

Возврат без значения возвращает значение null.

Дополнительная информация из руководства:

Если вызывается из функции, оператор return () немедленно завершает выполнение текущей функции и возвращает свой аргумент как значение вызова функции. return () также завершит выполнение инструкции eval () или файла сценария.

Если вызывается из глобальной области, то выполнение текущего файла сценария завершается. Если текущий файл сценария был включен () ed или require () ed, тогда управление передается обратно в вызывающий файл. Кроме того, если текущий файл сценария был включен () ed, то значение, возвращаемое return (), будет возвращено как значение вызова include (). Если return () вызывается из основного файла сценария, выполнение сценария завершается. Если текущий файл сценария был назван параметрами конфигурации auto_prepend_file или auto_append_file в php.ini, выполнение этого файла скрипта завершено.

Короткий ответ. Он просто заканчивает функцию, ее очень похожую на функцию без оператора возврата. Ничего не возвращается, функция только что вышла.

В вашем втором примере $ var будет = ничего.

Почему бы не выполнить его и не увидеть?

Да, " return; " или return (); в функции прекращает выполнение этой функции (или файла, если оператор возврата не находится в функции) в этой точке (если код выполняется) и технически возвращает нулевое значение.

В первом примере вывести заголовок «HTTP / 1.1 403 Forbidden», а затем завершить эту функцию, если request :: is_ajax () равен true.

В вашем примере кода:

 function text($var) { if ( ! $var) { return; } do_something(); } $var = text(''); 

Вы можете получить следующее:

  • Если $ var не является TRUE (т.е. false, null, text или integer), то выйдите из функции и верните null.
  • Если $ var является EXACTLY TRUE (оператор if проверяет, является ли $ var ничего, кроме true), запустите do_something ();

Я подозреваю, что вы, вероятно, захотите изменить оператор if:

 if (!is_string($var)) { 

если вы просто хотите, чтобы do_something () для строки или

 if (is_null($var)) { 

если вы только хотите сделать_собой () до $ var, если он установлен. Вы также можете изменить объявление функции на: function text ($ var == NULL) {, поэтому, если вы вызываете текст без параметра, $ var автоматически устанавливается в null.