2009-07-11 45 views
7

我剛纔看到這個在PHP函數中簡單的`return`是否過早地結束函數?

// 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僅僅是空或空白?

+0

我認爲你的意思是XHR,而不是HXR :) – 2009-07-11 15:16:31

+0

@Gab - 這只是我在網上找到的一個例子。 – alex 2009-07-11 23:49:12

回答

10
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 假 假 真正

2

簡答題。它只是結束函數,就像一個沒有return語句的函數。沒有返回,該函數剛剛退出。

在你的第二個例子中,$ var would = nothing。

爲什麼不執行它並看看?

7

PHP是動態類型的,所以沒有返回值等同於任何類型的返回空值。

4

沒有值的返回值返回null。從手動

的更多信息:

如果在一個函數中調用return()語句,將立即結束此函數的執行並將它的參數作爲函數調用的值。 return()也將結束eval()語句或腳本文件的執行。

如果從全局範圍調用,則當前腳本文件的執行結束。如果當前腳本文件是include()ed或require()ed,則控制權將傳回給調用文件。此外,如果當前腳本文件是include()ed,則給予return()的值將作爲include()調用的值返回。如果從主腳本文件中調用return(),則腳本執行結束。如果當前腳本文件是由php.ini中的auto_prepend_file或auto_append_file配置選項命名的,那麼該腳本文件的執行結束。

2

是,「return;」或return();在函數中停止運行該函數(或者如果返回語句不在函數中則返回文件)(如果代碼被執行)並在技術上返回空值。

您的第一個示例將輸出'HTTP/1.1 403 Forbidden'頭,然後在request :: is_ajax()等於true時結束該函數。

在你的代碼示例:

function text($var) 
{ 

    if (! $var) { 
     return; 
    } 
    do_something(); 

} 
$var = text(''); 

你可以有以下走出來了:

  • 如果是$ var是不正確的(即假,空,文本或整數),然後退出函數並返回null。
  • 如果$ var是完全正確的(if語句正在檢查$ var是否不是true),則運行do_something();

我會懷疑你可能想,如果更改語句之一:

if (!is_string($var)) { 

,如果你只是想do_something()爲字符串或

if (is_null($var)) { 

如果你只是想將do_something()設置爲$ var。您可能還想將函數聲明更改爲: 函數文本($ var == NULL){ 因此,如果您在沒有參數的情況下調用文本,$ var會自動設置爲null。