2009-07-11 31 views
7

Tôi vừa nhìn thấy điều nàyCó một `return` đơn giản trong một hàm PHP đơn giản là kết thúc hàm sớm?

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

Tôi đã không nhìn thấy một đơn giản return trước đây, và tôi chưa bao giờ sử dụng nó. Đoán duy nhất của tôi là nó chỉ đơn giản là hành động giống như bất kỳ return 'something' (tạm dừng chức năng), ngoại trừ không thực sự trả về kết quả.

Hơn nữa, điều gì sẽ xảy ra trong tình huống này?

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

$var = text(''); 

Tôi biết đó là một ví dụ xấu (nó có lẽ nên trả về false hoặc ném một ngoại lệ), nhưng nó sẽ là một lỗi, hoặc sẽ là $var đơn giản là null hoặc trống?

+0

Tôi nghĩ bạn có nghĩa là XHR, không phải HXR :) –

+0

@Gab - đó chỉ là một ví dụ tôi tìm thấy trên mạng. – alex

Trả lời

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

lợi nhuận:

NULL sai sai đúng

2

Câu trả lời ngắn gọn. Nó chỉ kết thúc hàm, nó giống như một hàm không có câu lệnh trả về. Không có gì được trả về, chức năng này vừa được thoát.

Trong ví dụ thứ hai của bạn, $ var sẽ = không có gì.

Tại sao không thực hiện và xem?

+0

Tôi muốn nhận được một số phản hồi từ cộng đồng và hy vọng một số lời khuyên. Cảm ơn câu trả lời của bạn. – alex

7

PHP là tự động gõ, vì vậy trở về không có giá trị tương đương với việc trả lại một giá trị null trong bất kỳ loại.

4

Trả về không có giá trị trả về null.

Thông tin thêm từ hướng dẫn:

Nếu gọi từ bên trong một hàm, sự trở lại() tuyên bố ngay lập tức chấm dứt thực hiện các chức năng hiện nay, và trả về đối số của nó là giá trị của cuộc gọi chức năng. return() cũng sẽ kết thúc việc thực thi câu lệnh eval() hoặc tập lệnh.

Nếu được gọi từ phạm vi toàn cầu, khi đó việc thực thi tệp tập lệnh hiện tại sẽ kết thúc. Nếu tệp tập lệnh hiện tại đã bao gồm() ed hoặc require() ed, thì điều khiển được truyền lại cho tệp gọi. Hơn nữa, nếu tệp tập lệnh hiện tại được bao gồm() ed, thì giá trị được đưa ra cho return() sẽ được trả về dưới dạng giá trị của lệnh gọi include(). Nếu return() được gọi từ bên trong tệp tập lệnh chính, thì việc thực thi tập lệnh kết thúc. Nếu tệp tập lệnh hiện tại được đặt tên theo tùy chọn cấu hình auto_prepend_file hoặc auto_append_file trong php.ini, thì việc thực thi tệp của tập lệnh được kết thúc.

2

Có, "return;" hoặc trả lại(); trong một hàm dừng chạy hàm đó (hoặc tệp nếu câu lệnh trả về không có trong một hàm) tại thời điểm đó (nếu mã được thực thi) và trả về một giá trị null.

Ví dụ đầu tiên của bạn sẽ xuất ra tiêu đề 'HTTP/1.1 403 Forbidden' và sau đó kết thúc hàm đó nếu yêu cầu :: is_ajax() bằng true.

Trong mã ví dụ của bạn:

function text($var) 
{ 

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

} 
$var = text(''); 

Bạn có thể có những điều sau ra đi:

  • Nếu $ var là không đúng sự thật (tức là sai sự thật, null, văn bản hoặc một số nguyên), sau đó thoát và trả về null.
  • Nếu $ var là CHÍNH XÁC TRUE (câu lệnh if đang kiểm tra nếu $ var là bất cứ điều gì nhưng đúng), sau đó chạy do_something();

tôi sẽ nghi ngờ bạn có thể muốn thay đổi câu lệnh if để một trong hai:

if (!is_string($var)) { 

nếu bạn chỉ muốn do_something() để một chuỗi hoặc

if (is_null($var)) { 

nếu bạn chỉ muốn để do_something() thành $ var nếu được đặt. Bạn cũng có thể muốn thay đổi khai báo hàm thành: văn bản hàm ($ var == NULL) { vì vậy nếu bạn gọi văn bản mà không có tham số, $ var sẽ tự động được đặt thành rỗng.

Các vấn đề liên quan