上午在更新一個php的插件時,遇到了一個類名被重復聲明的問題。雖然不是自己寫代碼造成的(其它原因,已修復),不過在調試時還是用到了一個php中內置的用于判斷類是否存在的函數,class_exists()

這篇博文,飛鳥慕魚就來和大家說一說,在php中判斷類是否存在的方法以及class_exists()函數的介紹。

php class_exists() 函數介紹

class_exists():判斷php中的類是否存在或定義

語法:

class_exists($class_name,$autoload)

參數:

$class_name:要判斷的類的名稱

国产视频app$autoload:默認TRUE,是否調用  _autoload,如果調用默認即可,關閉 FALSE。

返回值:

国产视频app如果 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 命名空間的類

国产视频appa.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)

注意:

国产视频app1、class_exists('sp') 返回的結果為 false,說明此類只能通過命令空間去查找

2、class_exists('sb\sp') 返回 true

国产视频app3、namespace():防止編寫的代碼與PHP內部的類/函數/常量發生沖突,并提高代碼的可讀性

class_exists() 函數擴展說明:

国产视频appphp中的 class_exists() 函數一定要慎用,主要因為它的第二參數標明是否要調用 __autoload 方法去加載類。由于 php 中的 __autoload 方法的機制,可能會對磁盤進行大量的I/O操作,嚴重影響效率,所在大家在使用 class_exists() 函數時,一定要將第二個參數設置為 false.

如以下代碼:

<?php
//第二個參數為 false
if(class_exists('class',false)){
    return true;
}else{
    return false;
}
?>