PHP関数/メソッド存在性検査小結


requireファイル(関数の重複を避ける)、ロードされたモジュールに基づいて異なるメソッドを呼び出す選択的呼び出し関数など、関数またはメソッドが存在するかどうかを確認する必要がある場合があります.主に次の関数を使用します.
 
(1)bool function_exists( string $function_name )
関数が存在するかどうかをチェックします.主にプロセス向け関数、内蔵関数、またはユーザー定義関数です.
include_のような構文構造once、echoはfalseを返します.
var_dump(function_exists ('var_dump'));       // true
var_dump(function_exists ('echo'));           // false
var_dump(function_exists ('include_once'));   // false

 
(2)bool method_exists ( object $object , string $method_name )
クラスのメソッドが存在するかどうかを確認し、$objectはクラスインスタンスまたはクラス名であってもよく、両者の間には何の違いもありません.
クラスが既知のクラスでない場合、この関数を呼び出すと登録されたautoloaderが使用されます.
このメソッドは、メソッドが呼び出されるかどうかをチェックしません.
class Test
{
    public function pub_func ()
    {
        print_r(__METHOD__);
    }
    private function pri_func ()
    {
        print_r(__METHOD__);
    }
    public function __call ($name, $args)
    {
        print_r(__METHOD__);
    }
}

var_dump(method_exists ('Test', 'pub_func')); // true
var_dump(method_exists ('Test', 'pri_func')); // true
var_dump(method_exists ('Test', 'not_func')); // false
$t = new Test();
var_dump(method_exists ($t, 'pub_func')); // true
var_dump(method_exists ($t, 'pri_func')); // true
var_dump(method_exists ($t, 'not_func')); // false

 
(3)bool is_callable ( mixed $var [, bool $syntax_only [, string $callable_name ]] )
パラメータが合法的な呼び出し可能な構造であるかどうかを検出し、通常の関数を検査するためにも、クラスメソッドを検査するためにも使用できます.
        $syntax_onlyのデフォルトはfalseです.
クラス名をパラメータとし、$syntax_onlyがfalseの場合、このメソッドを呼び出そうとします(アクセス性のみから__callは検出されません).メソッドがアクセスできない場合、Fatal errorが表示されます.
$syntax_onlyがtrue、またはインスタンスがパラメータの場合、_callも検査に組み込まれます.
var_dump(is_callable (array( 'Test', 'pub_func')));        // true
var_dump(is_callable (array( 'Test', 'pub_func'), true));  // true
var_dump(is_callable (array( 'Test', 'pri_func')));        // PHP Fatal error: Call to private method Test::pri_func()
var_dump(is_callable (array( 'Test', 'pri_func'), true));  // true
var_dump(is_callable (array( 'Test', 'not_func')));        // false
var_dump(is_callable (array( 'Test', 'not_func'), true));  // true
$t = new Test();
var_dump(is_callable (array( $t, 'pub_func')));         // true
var_dump(is_callable (array( $t, 'pub_func'), true));   // true
var_dump(is_callable (array( $t, 'pri_func')));         // true
var_dump(is_callable (array( $t, 'pri_func'), true));   // true
var_dump(is_callable (array( $t, 'not_func')));         // true
var_dump(is_callable (array( $t, 'not_func'), true));   // true