Lỗi Can’t use function return value in write context khi gọi isset() hoặc empty()

Nếu bạn đang lập trình PHP và gặp lỗi:

(!) Fatal error: Can't use function return value in write context

Hãy kiểm tra lại xem tình huống lỗi của bạn có giống dưới đây không:

  1. Bạn đang gọi isset() hoặc empty() (và một số ít hàm khác)
  2. Bạn đang truyền một hàm làm đối số cho isset() hoặc empty(). Ví dụ: isset(myFunction());

Trong PHP, isset() empty() là language constructs (đại khái một cách tương đối giống những câu lệnh hay từ khóa, chứ không thực sự là một hàm), và nếu vậy, nó chỉ có khả năng sử dụng với biến, không phải với hàm.

Ví dụ, đoạn mã sau hoàn toàn hợp lệ:

$a = "Hello";
$b = isset($a); // b trả về true

Giải quyết:

Vậy nếu muốn kiểm tra kết quả trả về của một hàm có null hay không thì phải làm sao?

Cách đơn giản nhất là hãy khai báo một biến:

$a = myFunction();
if(isset($a)) ...

Tuy nhiên, trong PHP, mọi hàm đều có giá trị trả về (chí ít là trả về null), do đó, thay vì sử dụng isset() hoặc empty(), bạn có cách dùng ngắn gọn và hiệu quả hơn như sau:

if(myFunction() != null) ...

hoặc:

if(myFunction()) ...

Hai câu lệnh trên tương đương nhau (bạn nên dùng cách dưới hơn) và tương đương với quan niệm của bạn khi dùng isset().

Ngoài ra, bạn còn có thể sử dụng hàm is_null() để thay thế. is_null() là một hàm, nên bạn có thể truyền kết quả trả về của một hàm khác cho nó. Điều khác biệt duy nhất là nó ngược ngữ cảnh với isset(), tức thay vì kiểm tra xem đối số có giá trị khác null hay không, thì bạn đang kiểm tra xem đối số có giá trị null hay không. Hai câu lệnh sau tương đương:

if(!myFunction()) ...

và:

if(is_null(myFunction())) ...

Ngoài isset() và empty() hay dùng theo dạng này, còn một số language construct khác bạn cũng có thể gặp vấn đề tương tự:

die()
empty()
list()
unset()
eval()
array()
exit()

Bình luận

Bình luận Facebook

lời bình luận