上午在更新一个php的插件时,遇到了一个类名被重复声明的问题。虽然不是自己写代码造成的(其它原因,已修复),不过在调试时还是用到了一个php中内置的用于判断类是否存在的函数,class_exists()
这篇博文,飞鸟慕鱼就来和大家说一说,在php中判断类是否存在的方法以及class_exists()函数的介绍。
php class_exists() 函数介绍
class_exists():判断php中的类是否存在或定义
语法:
class_exists($class_name,$autoload)
参数:
$class_name:要判断的类的名称
$autoload:默认TRUE,是否调用 _autoload,如果调用默认即可,关闭 FALSE。
返回值:
如果 class_exists() 判断的类已定义,返回TRUE,否则返回FALSE
php class_exists() 函数的使用
php代码
<?php class MyClass{ public function e(){ return ''; } } //判断的类存在 $bool = class_exists('MyClass'); var_dump($bool); //判断的类不存在 $bool = class_exists('MyClass_1'); var_dump($bool); ?>
运行结果:
bool(true) bool(false)
php 判断一个类是否定义或存在
1、判断一个类是否存在,并调用
php代码
<?php //这里定义了一个类 class MyClass{ public function e(){ return ''; } } //判断类是否已定义 if (class_exists('MyClass')) { $a = new MyClass(); echo $a->e(); }else{ echo '没有找到类'; } ?>
运行结果:
2、使用 namespace 命名空间的类
a.php 文件代码:
<?php //使用命名空间 namespace sb; //新建一个类 class sp{ } ?>
b.php 文件,判断类是否存在
<?php //引入 a.php require 'a.php'; // 判断类名 var_dump(class_exists('sp')); // 判断命名空间 var_dump(class_exists('sb\sp')); // 判断命名空间,关闭 __autoload 方法调用 var_dump(class_exists('sb\sp',false)); ?>
运行结果:
bool(false) bool(true) bool(true)
注意:
1、class_exists('sp') 返回的结果为 false,说明此类只能通过命令空间去查找
2、class_exists('sb\sp') 返回 true
3、namespace():防止编写的代码与PHP内部的类/函数/常量发生冲突,并提高代码的可读性
class_exists() 函数扩展说明:
php中的 class_exists() 函数一定要慎用,主要因为它的第二参数标明是否要调用 __autoload 方法去加载类。由于 php 中的 __autoload 方法的机制,可能会对磁盘进行大量的I/O操作,严重影响效率,所在大家在使用 class_exists() 函数时,一定要将第二个参数设置为 false.
如以下代码:
<?php //第二个参数为 false if(class_exists('class',false)){ return true; }else{ return false; } ?>
以上就是php 判断类是否存在或定义的方法。真正的快乐,不是狂喜,亦不是痛苦,它是细水长流,碧海无波,在芸芸众生中做一个普通的人,享受生命一刹那的喜悦。更多关于php 判断类是否存在或定义的方法请关注haodaima.com其它相关文章!