百科狗-知识改变命运!
--

class_exists() - php 类对象函数

梵高1年前 (2023-11-21)阅读数 12#技术干货
文章标签定义

class_exists()

(PHP 4, PHP 5, PHP 7)

检查类是否已定义

说明

class_exists(string $class_name[,bool $autoload= true]): bool

检查指定的类是否已定义。

参数

$class_name

类名。名字的匹配是不分区大小写的。

$autoload

是否默认调用__autoload。

返回值

class_exists() - php 类对象函数

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

更新日志

版本说明
5.0.2不再为已定义的 interface 返回TRUE。请使用interface_exists()。

范例

Example #1class_exists()例子

Example #2$autoloadparameter 例子

参见

  • function_exists() 如果给定的函数已经被定义就返回 TRUE
  • interface_exists() 检查接口是否已被定义
  • get_declared_classes() 返回由已定义类的名字所组成的数组
If you are using aliasing to import namespaced classes, take care that class_exists will not work using the short, aliased class name - apparently whenever a class name is used as string, only the full-namespace version can be used
use a\namespaced\classname as coolclass;
class_exists( 'coolclass' ) => false
If you recursively load several classes inside an autoload function (or mix manual loading and autoloading), be aware that class_exists() (as well as get_declared_classes()) does not know about classes previously loaded during the *current* autoload invocation.
Apparently, the internal list of declared classes is only updated after the autoload function is completed.
Beware: class_exists is case-INsensitive, as is class instantiation.
php > var_dump(class_exists("DomNode"));
bool(true)
php > var_dump(class_exists("DOMNode"));
bool(true)
php > var_dump(class_exists("DOMNodE"));
bool(true)
php > $x = new DOMNOdE();
php > var_dump(get_class($x));
string(7) "DOMNode"
(tested with PHP 5.5.10 on Linux)
This can cause some headaches in correlating class names to file names, especially on a case-sensitive file system.
Hi guys!
Be careful and don't forget about second boolean argument $autoload (TRUE by default) when check exists class after spl_autoload_register. Propose short example
file second.php

file index.php

Because __autoload executing much earlier than boolean returned, imho..
I'm running PHP 5.3.4 on Windows 7 and had some difficulty autoloading classes using class_exists(). In my case, when I checked for the class and it didn't exist, class_exists automatically threw a system Exception. I was also throwing my own exception resulting in an uncaught exception.

By registering an additional autoload handler function that did nothing, I was able to stop throwing the extra Exception and only throw my own.

Found this buried in some search results. I don't remember the page URL but if it would have been here it might have saved me some time!
[ >= PHP 5.3]
If you are checking if a class exists that is in a specific namespace then you have to pass in the full path to the class:
echo (class_exists("com::richardsumilang::common::MyClass")) ? "Yes" : "No";
If you have a directory of classes you want to create. (Modules in my instance)... you can do it like that

//---
Here the rule is that all modules are on the form
ModModulename.php and that the class has the same name as the file.
The $modules array has all the classes initialized after this code
If spl_autoload_register() had been called, then function will try autoload class if it does not exists.
Use instead 

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)