根据我在这个问题中得到的提示,我进行了更多搜索,并从哪里找到了很好的学习资源。
什么是自动加载?
自动加载基本上是程序找到未知类名并尝试在未定义类名的情况下加载它的过程。如果没有自动加载器,这种行为将导致致命错误(至少对于 PHP 而言)。使用自动加载器,情况会发生变化,程序将尝试加载类名,而不知道在哪里可以找到它,但依赖于为此目的而考虑的函数或类,这些函数/类被调用自动装载机.
__autoload() 与 spl_autoload_register()
在 PHP 中,我们有两种不同的方法来实现自动加载(您可能会发现从以下位置读取它很有用)PHP 的网站 http://www.php.net/manual/en/language.oop5.autoload.php.)。第一个是旧的__自动加载() http://www.php.net/manual/en/function.autoload.php,最新的是spl_autoload_register() http://www.php.net/manual/en/function.spl-autoload-register.php。但到底有什么区别呢?基本上 __autoload() 是独一无二的,拥有多个自动加载器会给你带来很多麻烦,并且会让你解决一个可以通过使用最新的 spl_autoload_* 函数轻松避免的问题。spl_autoload_register()另一方面,通过将多个自动加载器放在堆栈中,允许程序拥有多个自动加载器,这样整个系统变得更加灵活且复杂性大大降低(为不同目的使用单个自动加载器会导致拥有处理许多请求的大型独特功能,这样你的代码可维护性和可重用性就会减少)。Warning:使用 spl_autoload_register() 会覆盖 __autoload(),所以要小心。
编码标准(PHP):PSR-0 与 PSR-4
首先我们要说的是PSR-4 http://www.php-fig.org/psr/psr-4/是较新的,它被认为是一个改进PSR-0 http://www.php-fig.org/psr/psr-0/,但不是强制性的,您必须使用 4 而不是 0,如标准 (PSR-4) 所述:
它具有完全的互操作性,并且可以与任何其他自动加载规范(包括 PSR-0)一起使用。
那么为什么我应该使用其中之一而不是另一个呢?
现在这取决于您,但作为建议,PSR-4 解决了 PSR-0 的“嵌套”问题,因此您应该使用前者。假设我有一个应用程序,并且我的应用程序依赖于外部组件,PSR-0 遵循以下语法:
\vendor\(sub_namespaces\)class_name
其中 sub_namespaces 可能不存在。但这转化为硬盘驱动器上的完全限定路径:
path/to/project/vendor/sub/namespaces/class/name.php
现在假设我想在我的应用程序中包含一个名为 YourLibrary 的库
\YourDeveloper\YourLibrary\YourFunction
这将翻译为
/path/to/project/YourDeveloper/YourLibrary/YourFunction
问题是,如果我想将该库放在我的子文件夹中该怎么办:
/path/to/project/vendor/vendor_name
PSR-0 是绝对的,您不能仅修改名称空间来控制此行为(这会很愚蠢并且需要太多时间),因此它将转换为:
/path/to/project/vendor/YourDeveloper/src/YourDeveloper/YourLibrary/YourFunction
这不是非常嵌套和多余吗?好吧,使用 PSR-4 你可以避免这种情况并将其转化为
/path/to/project/vendor/YourDeveloper/YourLibrary/YourFunction
无需更改命名空间或自动加载器。这基本上就是 PSR-4 的工作原理。这个解释很简短,但它让您大致了解 PSR-4 为何诞生以及为什么应该使用它。如果您需要更充分的解释,您可以去阅读 PSR-0/4 规范,或者您可以阅读this http://www.sitepoint.com/battle-autoloaders-psr-0-vs-psr-4/sitepoint 上的漂亮文章。
我真的应该关心标准吗?
如果您已经在编程世界中呆了足够长的时间,您可能最终不会问这样的问题。但如果你是,你可能是一个新程序员,或者你成为程序员的时间还不够长,这就是你应该阅读这个答案的原因。
在 IT 世界中,尤其是在编程领域,标准几乎就是一切。如果我们不遵循标准,我们的计算机上甚至可能没有视频。如果任何人都遵循自己的标准,一切都会显得混乱,在这种情况下,自动装弹机就会变得个人化;因此,您最终将拥有许多自动加载器,而不是一个简单的自动加载器,每个标准一个,这使得您的应用程序更难以维护和调试(因为每个人都可以使erors).