Простой "возврат" в функции 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 или выбросить исключение), но будет ли это ошибкой или $var просто быть null или пустой?

5 ответов


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 ложный ложный правда


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


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

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

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

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


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

во втором примере $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 точно TRUE (оператор if проверяет, является ли $var чем-либо, кроме true), то запустите do_something ();

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

if (!is_string($var)) {

Если вы просто хотите do_something () в строку или

if (is_null($var)) {

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