php的class_exists和interface_exists函数

php函数 class_exists 和 interface_exists, 前者是用来检查类是否存在,后者是用来检查接口是否存在。如果你在写程序,使用自定义的__autoload时,要判断加载的文件是否附合要加载的类或接口的时候可以用到。注意一点的是,class_exists或interface_exists会自动调用__autoload来加载类或接口。如果不想用它自动调用__autoload,在第二个参数中,指定false.

class_exists — 检查类是否已定义

说明

bool class_exists ( string $class_name [, bool $autoload] )


如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE。

class_exists() 例子

if (class_exists('myclass')) {
   $myclass = new myclass();
}

autoload 参数例子

function __autoload($class) {
   include($class . '.php');
   // Check to see if the include declared the class
   if (!class_exists($class, false)) {
       trigger_error("Unable to load class: $class", E_USER_WARNING);
   }
}
//会自动调用__autoload
if (class_exists('MyClass')) {
    $myclass = new MyClass();
}

interface_exists — 检查接口是否已被定义
说明
bool interface_exists ( string $interface_name [, bool $autoload] )
本函数在由 interface_name 给出的接口已定义时返回 TRUE,否则返回 FALSE。

今天在网上查看class_exists方法(http://php.net/manual/en/function.class-exists.php)的用法的时候,发现class_exists方法的定义如下:
bool class_exists ( string $class_name [, bool $autoload = true ] );

它是有两个参数的,我们平时用这个方法的时候大都只给了第一个参数,第二个参数的默认值是默认为true,而关于第二个参数的解释是:
autoload
Whether or not to call __autoload by default.

所以当我们不设置第二个参数时,会去调用__autoload方法去加载类,
众所周知__autoload方法的机制,它可能会对磁盘进行大量的I/O操作,严重影响效率,所以大家在用这个方法的时候可以用如下两种方法解决:

NO1:把第二个参数设置为false
NO2:

//To find out whether a class can be autoloaded, you can use autoload in this way:


相关文章

发表评论

返回顶部