上午在更新一个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;
}
?>