Định Nghĩa.
Hàm is_callable() trong PHP sẽ kiểm tra xem giá trị của biến có thể được gọi như một hàm hay không.
Hàm này có thể xác minh rằng một biến chứa tên hàm hợp lệ hoặc nó chứa một mảng, với một đối tượng và tên phương thức.
Cú pháp.
Cú pháp:
is_callable ( mixed$var
[, bool$syntax_only
=FALSE
[, string&$callable_name
]] ) : bool
Trong đó:
$var
là biến cần kiểm tra.$syntax_only
là tham số, nếu mang giá trị TRUE hàm sẽ chỉ kiểm tra những biến có giá trị có thể được đặt làm tên của một hàm hoặc một phương thức, nó sẽ loại bỏ các giá trị không phải là chuỗi hoặc mảng.&$callable_name
là tên hàm hoặc tên phương thức, nếu hàm chưa được định nghĩa, nó sẽ mang giá trị tên của biến $var.
Giá trị trả về:
– Nếu biến có thể được gọi trả về TRUE.
– Nếu biến không thể được gọi thì trả về FALSE.
Ví dụ.
Biến có giá trị là một chuỗi đơn giản:
code:
function showFunction()
{
}
$functionVariable = 'showFunction';
var_dump(is_callable($functionVariable, true, $callable_name));
echo '<br />';
echo $callable_name;
kết quả:
bool(true)
showFunction
Giá trị của biến là một mảng bao gồm phương thức:
code:
class showClass {
function showMethod()
{
}
}
$object = new showClass();
$var = array(
$object,
'showMethod'
);
var_dump(is_callable($var, true, $callable_name));
echo '<br />';
echo $callable_name;
});
Kết quả:
bool(true)
Hàm is_callable() trong PHPshowClass::showMethod
Hàm liên quan.
- function_exists() – Cho biết hàm có tồn tại hay không.
- method_exists() – Cho biết phương thức có tồn tại hay không.
Thông tin thêm.
- is_callable () sẽ thử __autoload (), nếu có.
- is_callable dường như không thể giải quyết các không gian tên. Nếu bạn đang truyền một chuỗi, thì chuỗi đó phải bao gồm không gian tên đầy đủ của hàm.
<?php namespace foo\bar\baz; function something () { return (42); } var_dump (is_callable ('something')); // false var_dump (is_callable ('foo\bar\baz\something')); // true ?>
– Rất dễ măc phải vấn đề này, nhưng nếu bạn chỉ cần thêm __NAMESPACE__ vào chuỗi tên hàm thì bạn sẽ ổn trong hầu hết các trường hợp.
-
Nếu lớp đích có hàm ma thuật __call () được triển khai, thì is_callable sẽ LUÔN trả về TRUE cho bất kỳ phương thức nào bạn gọi nó.
is_callable không đánh giá logic bên trong của bạn bên trong triển khai __call () (và điều này là tốt).
Do đó, mọi tên phương thức đều có thể gọi được cho các lớp như vậy.
Do đó, nó là SAI để nói (như ai đó đã nói):
… is_callable sẽ xác định chính xác sự tồn tại của các phương thức được tạo bằng __call …
<?php class TestCallable { public function testing() { return "I am called."; } public function __call($name, $args) { if($name == 'testingOther') { return call_user_func_array(array($this, 'testing'), $args); } } } $t = new TestCallable(); echo $t->testing(); // Output: I am called. echo $t->testingOther(); // Output: I am called. echo $t->working(); // Output: (null) echo is_callable(array($t, 'testing')); // Output: TRUE echo is_callable(array($t, 'testingOther')); // Output: TRUE echo is_callable(array($t, 'working')); // Output: TRUE, expected: FALSE ?>
Các bạn có thể xem chi tiết hơn trên php.net.
Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm is_callable() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé.
Cảm ơn các bạn đã ghé thăm codetutam.com