Thoát PHP so với trả lại

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ẻ như ví dụ die() trước đây của chúng ta - PHP sẽ thử tải tệp "somefile" và lưu trữ 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

Ghi chú 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ó

Từ khóa return kết thúc một hàm và tùy ý sử dụng kết quả của một biểu thức làm giá trị trả về của hàm

Nếu return được sử dụng bên ngoài một chức năng, nó sẽ dừng mã PHP trong tệp chạy. Nếu tệp được bao gồm bằng cách sử dụng include, include_once, require hoặc require_once, thì kết quả của biểu thức được sử dụng làm giá trị trả về của câu lệnh bao gồm

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

Còn tùy. nếu tập lệnh của bạn không nhằm mục đích gì khác ngoài việc xuất ra một thông báo và bạn không muốn tập lệnh đó thực hiện bất cứ điều gì sau đó, thì exit() sẽ hoạt động. Nếu không, hãy sử dụng return . Lưu câu trả lời này.

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

Từ khóa trả về kết thúc một hàm và tùy ý sử dụng kết quả của một biểu thức làm giá trị trả về của hàm. Nếu return được sử dụng bên ngoài một hàm, nó sẽ dừng mã PHP trong tệp chạy.

Tương đương với thoát PHP là gì?

PHP die() . Trong PHP, die() giống như exit(). Kết quả của chương trình sẽ là một màn hình trống.

Có cần trả lại trong PHP không?

Không, việc trả về một giá trị từ một hàm không cải thiện tốc độ tập lệnh của bạn. Bạn không cần trả về giá trị từ hàm -> hoàn toàn không bắt buộc.