Mục tiêu của tôi là đặt một số logic phức tạp trong câu lệnh if(). Hãy nói rằng tôi có một mảng các giá trị và tôi sẽ thực hiện một chút mã nếu tất cả mọi thứ trong mảng của tôi là nonzero. Thông thường, tôi có thể nói, $valid = true
, foreach
mảng của tôi và đặt $valid = false
khi tìm thấy số không. Sau đó, tôi sẽ chạy mã của tôi if ($valid)
. Ngoài ra, tôi có thể đặt vòng lặp của tôi vào một hàm và đặt hàm intop của tôi if()
.Đóng cửa PHP trong các câu lệnh IF là gì?
Nhưng tôi lười biếng, vì vậy tôi không muốn muck về với một loạt các lá cờ "hợp lệ", và tôi không muốn viết một chức năng hoàn toàn mới mà chỉ được sử dụng ở một nơi.
Vì vậy, chúng ta hãy nói rằng tôi có điều này:
if ($q = function() { return 'foo'; }) {
echo $q;
}
else {
echo 'false';
}
Tôi đã mong rằng if
được 'foo'
, mà trả về true. Việc đóng của tôi được cam kết là $q
và tuyên bố sẽ thực hiện. $q
trả về chuỗi foo
và 'foo' được in.
Thay vào đó, tôi gặp lỗi Object of class Closure could not be converted to string
.
Vì vậy, hãy thử loại này thay vì:
if (function() { return false; }) {
echo 'foo';
}
else {
echo 'true';
}
Tôi đã mong rằng chức năng của tôi sẽ trả về false và 'true' sẽ được in. Thay vào đó, 'foo' được in.
Điều gì sai về cách tôi thực hiện việc này? Có vẻ như nó đang nói, "Đúng, đó chắc chắn là một chức năng!" thay vì "Không, bởi vì hàm được đánh giá là sai". Có cách nào để làm những gì tôi đang cố gắng làm không?
Bạn có vẻ nhầm lẫn các hàm với giá trị trả về của chúng. – delnan
Tôi cho rằng điều tôi muốn gần hơn với 'if (function() {return false;}()) {' có vẻ hợp lệ trong Javascript chứ không phải PHP. – ajp5103
http://stackoverflow.com/questions/3568410/anonymous-functions-that-execute-immediately call_user_func() là những gì tôi đang tìm kiếm. – ajp5103