首页 > 后端开发 > php教程 > 自动加载战:PSR-0对PSR-4

自动加载战:PSR-0对PSR-4

Christopher Nolan
发布: 2025-02-23 08:45:11
原创
197 人浏览过

Battle of the Autoloaders: PSR-0 vs. PSR-4

自动加载战:PSR-0对PSR-4

钥匙要点

  • > PSR-0和PSR-4是PHP中的自动加载标准,PSR-0根据类的名称定义路径,允许在类名称中下划线,而PSR-4的目的是简化文件夹结构并删除PSR-余力。 0.
  • > PSR-4,称为面向软件包的自动加载,允许使用更清洁的软件包,但实现更为复杂。它还可以确保自动加载器绝不应该引发异常或增加错误,并保持与多个自动加载器的兼容性。
  • PSR-0和PSR-4都有其优点和缺点:PSR-4允许更简单的文件夹结构,但没有显示出完全合格名称的类的确切路径,而PSR-0可能是混乱的,但是支持开发人员使用较旧的命名惯例和辅助工具以其名称定位课程。
  • >如果您已经超越了PHP培训的初学者阶段,那么您已经听说了PSR-0 - 一种自动加载标准,它定义了自动在代码中自动包含PHP类的方法,而无需使用诸如要求和包含之类的语句。

> psr-0

> PSR-0查看类的命名空间,并从硬盘驱动器上的位置辨别出该信息的位置。例如,ZendMailMessage类将导致/path/path/project/lib/vendor/zend/mail/message.php。

> PSR-0还支持类名中的下划线作为替代方案,以使从5.2及以更早的过渡更加容易。 zend_mail_message也将导致/path/to/project/lib/vendor/zend/mail/message.php。

作曲家

作曲家出现并席卷了PHP软件包管理世界时,情况发生了变化。由于其某些规则,文件夹通常会重复,并且在通过作曲家查看PSR-0类安装时变得太深了。例如,某些文件夹结构最终以这样的方式出现:

这充其量是混乱的,因为:

vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登录后复制
登录后复制

>“ SRC”和“测试”目录必须包括供应商和软件包目录名称。这是PSR-0符合性的工件。

>

因此,一些高素质的PHP开发人员聚集在一起,为新标准提出了建议:PSR-4。

> psr-4
PSR-4旨在在必要时与PSR-0进行补充并与之合作,而不是完全替代它。它可以,但不必。 PSR-4的主要目标是完全删除PSR-0和5.3天前的残余物,并允许更简洁的文件夹结构。使用PSR-4,上述文件夹将看起来像这样:

>升级PSR-0不是选项

因为PSR-0不允许在类名称的任何部分之间进行插图
vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登录后复制
登录后复制
>

>这非常重要 - 这意味着实施PSR-4虽然允许更清洁的软件包,但实施将变得更加复杂。我们称呼为PSR-4包装的自动加载,因为它有利于简单之前的包裹清洁度。

>

选择的方法

建议的目标如下:保留所有软件包必须至少包含两个命名空间级别(供应商和软件包)的PSR-0规则,请确保供应商包装组合可以映射到任何文件夹,并允许使用fifix供应商包装组合和其余完全合格的班级名称之间的文件夹。

这意味着我们将能够将我们的课程放在包装代码中的任何地方,对我们作为人类很有意义,并且仍然在PHP中平稳地使用它们,而无需编写替代加载技术或求助于手动加载。

> 此外,草案明确指出,PSR-4自动加载器绝不应仅仅因为可以注册多个自动加载器而引起异常或引起错误,并且如果一个人未能加载班级,则应该给其他机会这样做,而其他人则有机会这样做 - 投掷 - 投掷错误并停止流量破坏了此兼容性。如果需要有关故障的其他信息,则应使用PSR-3兼容记录器或其他任意手段。 如示例文件中所示,使用PSR-4自动加载器从以下结构加载类:>

看起来像这样:

在其中调用新的foobarquxquux;将尝试从第一个注册目录加载,而新的foobarquxquuxtest;将尝试从第二个加载。
vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登录后复制
登录后复制
>

此示例还说明了每个单个名称空间的多个文件夹的使用。

>
vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登录后复制
登录后复制
结论

自动加载中没有银色子弹。每种方法都带来了一些优点和缺点 - PSR-4将允许更简单的文件夹结构,但仅通过查看完全合格的名称就可以阻止我们知道班级的确切路径。另一方面,PSR-0在硬盘驱动器上是混乱的,但是支持过去陷入困境的开发人员(一流的名称用户),并通过查看其名称来帮助我们辨别班级的位置。

>您对PSR-4的感觉如何?在下面的评论中让我们知道,或在众多辩论之一中表达您的意见。

>

>无论哪种方式 - 毫无疑问,以包装为导向的自动加载将留在这里。如果未正式接受为标准,则由需要它的人实施自定义。我们必须加入讨论并改善足够的概念以达到这种正式状态。>

关于PSR-0和PSR-4自动加载的常见问题

> PSR-0和PSR-4?

> PSR-0和PSR-4之间的主要区别在于它们处理名称空间和目录结构的方式。 PSR-0需要名称空间与目录结构之间的直接相关性,这意味着命名空间中的每个凸起都对应于目录分离器。另一方面,PSR-4允许采用更灵活的方法,其中一部分名称空间可以映射到任何目录,其余的名称空间可以映射到子目录结构。引入PSR-4时引入的PSR-4?引入了PSR-4,以克服PSR-0的某些局限性。 PSR-0在名称空间和目录结构之间的严格相关性导致了深度嵌套的目录,这并不总是实用或有效的。 PSR-4提供了一种更灵活的方法,使开发人员可以将命名空间映射到任何目录,从而减少了对深目录嵌套的需求。

我可以在同一项目中同时使用PSR-0和PSR-4吗? >

是的,可以在同一项目中同时使用PSR-0和PSR-4。但是,重要的是要注意,它们不应用于自动加载相同的类别。在大型项目中,使用两种标准都可以是有益的,在大型项目中,某些遗留代码遵循PSR-0标准,而较新的代码遵循PSR-4标准。

> PSR-4在PSR-0上如何改善?通过提供更灵活的自动加载方法,PSR-4在PSR-0上有所改善。它允许开发人员将一部分名称空间映射到任何目录,从而减少对深目录嵌套的需求。这使得管理和浏览项目的目录结构变得更加容易。

是PSR-0弃用?

是的,PSR-0已被标记为已弃用。这意味着,尽管它仍然有效,但不建议在新项目中使用。 PSR-4是Php。

>

>自动加载的推荐标准。然后将其余的名称空间映射到子目录结构。这允许采用自动加载的更灵活,更有效的方法。

使用PSR-4?

psr-4有什么好处,包括多种好处,包括更灵活的自动加载方法,减少,减少需要深度目录嵌套和提高效率。这也是PHP自动加载的建议标准,使其成为新项目的不错选择。

>

>我如何从psr-0到psr-4?到PSR-4涉及更改命名空间和目录的方式。在PSR-4中,可以将一部分命名空间映射到任何目录,其余的名称空间可以映射到子目录结构。这可能需要重组项目的目录结构。

>我可以在较旧的php版本中使用PSR-4吗?

psr-4需要PHP 5.3或更高版本。如果您使用的是较旧版本的PHP,则需要升级才能使用PSR-4。 PHP可能会继续发展,随着语言及其生态系统的发展,新的标准和实践被引入。但是,在可预见的将来,PSR-4是PHP中自动加载的建议标准。

以上是自动加载战:PSR-0对PSR-4的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板