Hàm is_callable() trong PHP.

22/06/2020 - lượt xem
Chia sẻ
 
Rate this post

Đị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.

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

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm