(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
is_callable — 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる
value の内容が callable かどうか、
または call_user_func() を使ってコールできるかを調べます。
valueチェックする値。
syntax_only
true の場合、この関数は単に value
が関数またはメソッドであるかどうかだけを調べます。
invokable オブジェクト、
Closure、文字列、
コールバックとして使える有効な構造の配列でない値は拒否されます。
有効な配列の形式は、
最初のエントリがオブジェクトあるいは文字列で、
2 番目のエントリが文字列である 2 つのエントリからなるものです。
callable_name
"呼び出し名" を受け取ります。下の例では
"SomeClass::someMethod" です。
これは SomeClass::someMethod()
呼び出し可能な static メソッドであるかのようにみえますが、
そうではないことに注意しましょう。
例1 文字列が関数としてコールできるかを調べる
<?php
function someFunction() {}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name));
var_dump($callable_name);
?>上の例の出力は以下となります。
bool(true) string(12) "someFunction"
例2 配列が関数としてコールできるかを調べる
<?php
class SomeClass
{
public function someMethod() {}
}
$anObject = new SomeClass();
$methodVariable = [$anObject, 'someMethod'];
var_dump(is_callable($methodVariable, true, $callable_name));
var_dump($callable_name);
?>上の例の出力は以下となります。
bool(true) string(21) "SomeClass::someMethod"
例3 is_callable() とコンストラクタ
コンストラクタは、
オブジェクトが作成される際にコールされるメソッドであるにも関わらず、
static メソッドではありませんし、
is_callable()
はコンストラクタに対して false を返します。
特定のクラスが現在のスコープからインスタンス可能かをチェックする用途に
is_callable() は使えません。
<?php
class Foo
{
public function __construct() {}
public function foo() {}
}
var_dump(
is_callable(['Foo', '__construct']),
is_callable(['Foo', 'foo'])
);
$foo = new Foo();
var_dump(is_callable([$foo, '__construct']));
?>上の例の出力は以下となります。
bool(false) bool(false) bool(true)
true を返します。
たとえそのメソッドが定義されていなくてもです。