目录
钥匙要点
>升级PSR-0不是选项
选择的方法
关于PSR-0和PSR-4自动加载的常见问题
> PSR-0和PSR-4?
我可以在同一项目中同时使用PSR-0和PSR-4吗? >
是PSR-0弃用?
>
首页 后端开发 php教程 自动加载战:PSR-0对PSR-4

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

Feb 23, 2025 am 08:45 AM

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是REST API设计原理? 什么是REST API设计原理? Apr 04, 2025 am 12:01 AM

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

PHP中的匿名类是什么?您何时可以使用它们? PHP中的匿名类是什么?您何时可以使用它们? Apr 04, 2025 am 12:02 AM

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。

See all articles