Return có thoát khỏi chức năng PHP không?

Hai chức năng đơn giản cung cấp cho tập lệnh của bạn nhiều sức mạnh hơn. exit[] và eval[] - cả hai đều rất dễ dàng. Exit[] chỉ lấy một tham số tùy chọn và chấm dứt thực thi tập lệnh ngay lập tức. Nếu bạn chuyển một tham số, thì tham số này được sử dụng làm mã thoát tập lệnh và nếu là một chuỗi, nó sẽ được in ra. Lưu ý rằng hàm die[] là bí danh của hàm exit[] và hoạt động theo cách tương tự. Eval[] là một hàm khác nhận một tham số chuỗi, nhưng nó thực thi chuỗi đó như thể đó là mã PHP. Dưới đây là ví dụ về cả exit[] và eval[] đang hoạt động


Đối với những người đi dạo ngoài kia. exit[] về mặt kỹ thuật không phải là một chức năng, đó là một cấu trúc ngôn ngữ

Tập lệnh đó gán "exit[]" cho $str, sau đó chuyển $str vào eval[]. Như tôi đã đề cập, eval[] sẽ thực thi chuỗi mà nó nhận được như thể nó là mã PHP, vì vậy kết quả cuối cùng là PHP chạy hàm exit[] thông qua eval[] và kết thúc tập lệnh

Exit[] là một chức năng rất phổ biến và được sử dụng bất cứ khi nào bạn cần kết thúc tập lệnh mà không cần thực hiện thêm. Ví dụ

if [$blah != $blahblah] {
    print "Access denied.";
    exit;
}

Eval[] có vẻ hơi vô nghĩa đối với bạn, nhưng nó thực sự rất hữu ích - nó cho phép bạn chuyển bất kỳ chuỗi văn bản nào dưới dạng mã PHP và thực thi nó. Điều này cho phép bạn lưu trữ mã PHP của mình trong cơ sở dữ liệu hoặc để tính toán nó một cách nhanh chóng, giúp bạn linh hoạt hơn rất nhiều

Hàm exit[] nhận tối đa một tham số, có thể là số trả về của chương trình hoặc chuỗi. Nhiều chương trình trả về các số để chúng có thể được kết nối với các chương trình khác và kết quả đầu ra của chúng được đánh giá chính xác. Trong trường hợp này, 0 thường có nghĩa là "mọi thứ đều ổn" và mọi thứ khác có nghĩa là "đã xảy ra sự cố". Sử dụng exit[] với một chuỗi khiến PHP xuất chuỗi sau đó chấm dứt tập lệnh - một hành vi thường được các lập trình viên sử dụng với bí danh của exit[], die[], như thế này

do_some_func[] OR die["do_some_func[] returned false!"];

Trong tình huống đó, do_some_func[] sẽ được gọi và nếu nó trả về false, die[] sẽ được gọi để kết thúc tập lệnh. Đây là một cách nhanh chóng và dễ dàng để đảm bảo rằng một số chức năng nhất định đã chạy thành công trước khi bạn đi sâu vào tập lệnh của mình. Lý do mã hoạt động là vì toán tử OR có nghĩa là PHP sẽ chỉ thực thi hàm thứ hai nếu hàm đầu tiên trả về false

Lưu ý rằng đây là cách sử dụng phổ biến nhất cho toán tử OR. Nếu bạn nhớ lại từ trước đó,. cao hơn toán tử OR về mức độ ưu tiên, và quan trọng hơn,. cũng cao hơn =

Bây giờ, hãy dành một chút thời gian để suy nghĩ về điều này. dòng mã tiếp theo này làm gì?

$fp = fopen["somefile", "r"] || die["Could not open file!"];

Nhìn bề ngoài, có vẻ giống như ví dụ die[] trước đây của chúng ta - PHP sẽ thử tải tệp "somefile" và lưu một con trỏ tệp tới nó trong $fp, và nếu không thành công, sẽ thoát ra với thông báo "Không thể . "

Tuy nhiên, đó không thực sự là những gì được thực hiện. Thay vào đó, bởi vì. có mức độ ưu tiên cao hơn =, nó được tính trước. Vì vậy, đầu tiên PHP sẽ cố gắng tải một số tập tin. Nếu thành công, fopen[] sẽ trả về một tài nguyên có giá trị là true. Đương nhiên, tất cả các cuộc gọi die[] đều thành công, do đó, die[] cũng sẽ luôn được đánh giá là đúng. Tuy nhiên, vì PHP sẽ làm đoản mạch. toán tử, khi fopen[] thành công die[] sẽ không được gọi và. toán tử sẽ trả về 1 [true] vì toán hạng ở bên trái của nó [lệnh gọi hàm fopen[]] trả về true

Về cơ bản, PHP đọc dòng mã như thế này

$fp = [fopen["somefile", "r"] || die["Could not open file!"]];

Cuối cùng, 1 này sẽ được gán cho $fp. Đây rõ ràng không phải là mục đích và đây là lúc toán tử OR xuất hiện. Vì OR có mức ưu tiên thấp hơn =, PHP đọc dòng mã như thế này

[$fp = fopen["somefile", "r"]] or die["Could not open file!"];

Nghĩa là, fopen[] được gọi và giá trị của nó được gán cho $fp, giá trị này sau đó được đưa vào toán tử so sánh. Như bạn có thể thấy, thực sự cần phải có cả hai. và HOẶC xung quanh, nhưng hãy chắc chắn rằng bạn chọn đúng

Lưu ý của tác giả. Tôi khuyên bạn nên ghi nhớ câu trích dẫn sau đây từ người tạo ra PHP, Rasmus Lerdorf. "Nếu eval[] là câu trả lời, thì gần như chắc chắn bạn đang hỏi sai câu hỏi. " Điều đó không có nghĩa là eval[] là xấu, chỉ đơn thuần là bạn nên suy nghĩ hai lần nếu không muốn nói là ba lần trước khi sử dụng nó

Bạn muốn học PHP 7?

Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay

Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó

Mục đích của câu lệnh return trong PHP là trả lại quyền kiểm soát thực thi chương trình trở lại môi trường mà nó được gọi. Khi quay lại, việc thực thi biểu thức theo sau biểu thức đã gọi hàm hoặc mô-đun khác

Nếu câu lệnh return xảy ra bên trong một hàm, thì việc thực thi hàm hiện tại sẽ bị chấm dứt, bàn giao quyền điều khiển trở lại môi trường mà từ đó nó được gọi. Câu lệnh return có thể có một biểu thức là mệnh đề tùy chọn phía trước nó. Trong trường hợp đó, giá trị của biểu thức cũng được trả về ngoài điều khiển

Nếu gặp phải trong tập lệnh được bao gồm, việc thực thi tập lệnh hiện tại sẽ kết thúc ngay lập tức và quyền điều khiển sẽ quay trở lại tập lệnh đã bao gồm tập lệnh đó. Nếu nó được tìm thấy trong chính tập lệnh cấp cao nhất, quá trình thực thi sẽ kết thúc ngay lập tức, trao lại quyền kiểm soát cho HĐH

trở lại trong một chức năng

Ví dụ sau hiển thị câu lệnh return trong một hàm

Ví dụ

Bản thử trực tiếp

";
}
echo "before calling SayHello[] function
"; SayHello[]; echo "after returning from SayHello[] function"; ?>

đầu ra

Điều này sẽ tạo ra kết quả sau -

before calling SayHello[] function
Hello World!
after returning from SayHello[] function

trở lại với giá trị

Trong ví dụ sau, một hàm trả về một biểu thức

Ví dụ

Bản thử trực tiếp

________số 8

đầu ra

Điều này sẽ tạo ra kết quả sau -

calling function with argument 0
function returns square of 0 = 0

Trong ví dụ tiếp theo, kiểm tra. php được bao gồm và có trả về ststement khiến điều khiển quay lại gọi tập lệnh

Ví dụ

Bản thử trực tiếp

if [$blah != $blahblah] {
    print "Access denied.";
    exit;
}
0

đầu ra

Điều này sẽ tạo ra kết quả sau khi tập lệnh chính được chạy từ dòng lệnh−

if [$blah != $blahblah] {
    print "Access denied.";
    exit;
}
1

Cũng có thể có một mệnh đề biểu thức trước câu lệnh return trong tệp được bao gồm. Trong ví dụ sau, bao gồm kiểm tra. php trả về một chuỗi cho tập lệnh chính chấp nhận và in giá trị của nó

Trả về có thoát khỏi chức năng không?

Câu lệnh return kết thúc quá trình thực thi hàm và trả lại quyền điều khiển cho hàm gọi. Thực thi tiếp tục trong chức năng gọi tại thời điểm ngay sau cuộc gọi. Một câu lệnh return có thể trả về một giá trị cho hàm gọi. Để biết thêm thông tin, hãy xem Loại trả lại.

Sự khác biệt giữa quay lại và thoát trong PHP là gì?

đối với những bạn nghĩ rằng sử dụng return trong tập lệnh cũng giống như sử dụng exit lưu ý rằng. việc sử dụng return chỉ để thoát khỏi quá trình thực thi tập lệnh hiện tại, thoát khỏi toàn bộ quá trình thực thi .

Làm cách nào để thoát khỏi một hàm PHP?

Hàm exit[] trong PHP là một hàm có sẵn dùng để xuất thông báo và kết thúc tập lệnh hiện tại. Hàm exit[] chỉ kết thúc việc thực thi tập lệnh. Hàm tắt máy và hàm hủy đối tượng sẽ luôn được thực thi ngay cả khi hàm exit[] được gọi.

Làm cách nào để trả về giá trị từ hàm PHP?

Các giá trị được trả về bằng cách sử dụng câu lệnh trả về tùy chọn . Bất kỳ loại nào cũng có thể được trả về, bao gồm cả mảng và đối tượng. Điều này làm cho chức năng kết thúc thực thi ngay lập tức và chuyển quyền điều khiển trở lại dòng mà nó được gọi.

Chủ Đề