此问题在此处已有答案:
Best Way To Autoload Classes In PHP(8个答案)
昨天关门了。
我正在开发一个吉他和弦库。在这个库的一些文件中,我有这样的东西:
require_once "lib/GuitarChord.php";
require_once "lib/Chord.php";
require_once "lib/Key.php";
require_once "lib/Tuning.php";
如何创建此库,使其不需要知道其他库文件的位置?
这样一个人就可以在任何目录中拥有库文件了吗?
5条答案
按热度按时间wj8zmpe11#
为这些类可能所在的所有位置创建自动加载器。
例如:
然后,如果您想要加载
Chord
类,并且您知道它在您的lib
文件夹中,则自动加载器将在您执行以下操作时为您执行该工作:您可以使用
spl_autoload_register
附加许多不同的自动加载器回调ldfqzlk82#
您应该检查namespaces和autoloaders。
假设您的所有类都在'GuitarChords'命名空间中-因此您可以创建类似于以下内容的autoload函数(假设您注册autoloader的文件位于“lib”的父目录中):
我认为最好为每个库集/命名空间注册一个autoload函数。根据系统的复杂性,遍历目录和使用include_once,file_exists等可能会产生一些讨厌的IO开销。
w7t8yxp53#
如果你不想在一个文件中包含所有的类,你可以把文件夹名设置在某个地方,用户只需要设置一次:
至于处理不同类型的数据库,您可以进行另一个设置,如$db_type,用户可以将其设置为“MYSQL”、“FILE”、“XML”等。在调用db的地方,使用switch语句查看它们正在使用什么数据库方法,并相应地更改您的调用。
**编辑:**还值得研究一下PHP's __autoload feature
rsl1atfo4#
您可能想尝试
Zend AutoLoader
。mftmpeh85#
如果你的库使用了所有或大部分包含的类,那么考虑把所有与你的库相关的类放在同一个文件中。其他的解决方案只会涉及到添加更多的代码,在这种情况下,你可能应该坚持使用你当前的方法。
如果您希望出于开发目的拆分文件,那么无论如何都要继续这样做,但您仍然可以将其打包到一个文件中,以供生产使用,以便人们轻松地包括在内。