【发布时间】:2019-10-16 05:31:20
【问题描述】:
我正在开发一个应用程序,其中有很多 PHP 类,我编写如下所示的类
<?php
if(!class_exists('AClass1')){
class AClass1{
}
}
?>
同样我有大约 400 个类,而且我使用 php 自动加载器脚本 https://github.com/varunsridharan/php-autoloader 连同一个类图生成器 https://github.com/varunsridharan/php-classmap-generator
所以当我写下如下条件时会发生什么
if(class_exists('AClass1')){
// Some Code To RUN
}
在上面的代码中,如果 AClass1 类不存在,那么它会通过 class_exists 函数自动加载,这对我有好处
但是当我在一个名为 aclass1.php
的文件中编写这样的代码时<?php
if(!class_exists('AClass1')){
class AClass1{
}
}
?>
如果该文件是通过上面的 if 条件加载的,那么在加载文件后它仍然循环到自动加载器而不是它应该注册类
那么有什么好方法可以避免循环进入自动加载器,即使文件在类源中
- 注册课程时切勿使用
class_exists - 使用
class_exists('CLASSNAME',false)避免自动加载器内部循环
【问题讨论】:
-
您为什么不简单地为您的文件添加一个唯一的命名空间,而不是放入一堆
class_exists()?然后你可以拥有多少个你想要的同名的类,只要它们有不同的命名空间。 -
@MagnusEriksson 我用命名空间创建了我的项目。但唯一的问题是它是一个 wordpress 框架github.com/wponion/wponion
-
你为什么要检查你要定义的类是否存在?我的意思是您可以使用带有 false 的 class_exists 作为第二个参数。但这对我来说毫无意义,除非你正在创建某种“polyfill”。但是,如果您试图防止多次包含文件时出错,那么就不要多次包含该文件。就这么简单...
-
如果它是一个 wordpress 框架,为什么重要?它仍然是 PHP。如果您将它们放在名称空间中,那么
class_exists()首先有什么意义?您实际上想通过使用它们来解决什么问题? -
@slepic 对不起,我很困惑,:-( 你介意解释一下吗
标签: php