2009-07-11 5 views
7

Właśnie widziałem tenCzy prosty "return" w funkcji PHP po prostu kończy funkcję przedwcześnie?

// 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; 
} 

nie widziałem prosty return przed i nigdy nie zostały wykorzystane. Moim jedynym przypuszczeniem jest to, że po prostu działa tak samo jak każdy inny return 'something' (zatrzymując funkcję), z wyjątkiem tego, że nie zwraca wyniku.

Co się stanie w tej sytuacji?

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

$var = text(''); 

wiem, że to zły przykład (powinno to prawdopodobnie return false lub wyjątek), ale byłoby to błąd, czy miałby $var prostu być null lub pusty?

+0

Myślę, że chodziło Ci o XHR, nie o HXR :) –

+0

@Gab - to był tylko przykład, który znalazłem w sieci. – alex

Odpowiedz

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"; 

powraca:

NULL false false prawda

2

Krótka odpowiedź. Po prostu kończy się funkcja, podobnie jak funkcja bez instrukcji return. Nic nie jest zwracane, funkcja jest po prostu zakończona.

W twoim drugim przykładzie $ var byłoby = nic.

Dlaczego nie wykonać i zobaczyć?

+0

Chciałem uzyskać odpowiedź od społeczności i mam nadzieję, że poradzę. Dzięki za odpowiedź. – alex

7

PHP jest dynamicznie wpisane, więc wracając żadnej wartości jest równoznaczne z powrotem wartość null w każdym rodzaju.

4

Zwrot bez wartości zwraca null.

Więcej informacji z podręcznika:

Jeśli wywołana z wnętrza funkcji, zwrot() oświadczenie natychmiast kończy wykonywanie bieżącej funkcji i zwraca swój argument jako wartość wywołania funkcji. return() zakończy także wykonywanie instrukcji eval() lub skryptu.

Po wywołaniu z zasięgu globalnego, wykonywanie bieżącego pliku skryptu zostaje zakończone. Jeśli bieżący plik skryptowy był include() ed lub require() ed, to sterowanie jest przekazywane do pliku wywołującego. Ponadto, jeśli bieżący plik skryptu został dołączony(), to wartość zwrócona przez return() zostanie zwrócona jako wartość wywołania include(). Jeśli funkcja return() zostanie wywołana z głównego pliku skryptu, wykonywanie skryptu zostanie zakończone. Jeśli bieżący plik skryptu został nazwany przez opcje konfiguracji auto_prepend_file lub auto_append_file w pliku php.ini, to wykonanie tego skryptu zostało zakończone.

2

Tak, "return;" lub return(); w funkcji przerywa działanie tej funkcji (lub pliku, jeśli instrukcja return nie jest funkcją) w tym momencie (jeśli kod jest wykonywany) i technicznie zwraca wartość pustą.

Twój pierwszy przykład wypisze nagłówek "HTTP/1.1 403 Forbidden", a następnie zakończy tę funkcję, jeśli request :: is_ajax() będzie równy true.

W przykładzie kodu:

function text($var) 
{ 

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

} 
$var = text(''); 

można mieć następujące obecnie jest:

  • Jeśli $ var nie jest prawdą (czyli false, null, tekst lub liczbę całkowitą), następnie zjazd funkcja i zwraca wartość null.
  • Jeśli $ var jest DOKŁADNIE PRAWDZIWĄ (instrukcja if sprawdza, czy zmienna $ var nie jest prawdziwa), uruchom polecenie do_something();

bym cię podejrzewać, prawdopodobnie chcesz zmienić if albo:

if (!is_string($var)) { 

jeśli chcesz po prostu do_something() na ciąg znaków lub

if (is_null($var)) { 

jeśli tylko chcesz to do_something() do $ var, jeśli zostało ustawione. Możesz również chcieć zmienić deklarację funkcji na: tekst funkcyjny ($ var == NULL) { , więc jeśli wywołasz tekst bez parametru, zmienna $ var jest automatycznie ustawiana na wartość null.

Powiązane problemy