我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

PSR-4 标准补充 1.概述

本文的目的是为 PHP 加载器的命名空间映射文件系统路径建立一个统一的规则,并自动附加到其他 SPL 注册中

运营商共存。本文旨在作为补充,而不是取代 PSR-0。

2. 你为什么要这样做?前 PSR-0

PSR-0 类命名和自动加载标准基于 PHP 5.2 和广泛接受的 Horde/REAR 约定

习惯上将所有 PHP 类源代码放在一个主目录中,并在类名中使用下划线来表示伪命名空间,如下所示:

  1. /path/to/src/
  2. VendorFoo/
  3. Bar/
  4. Baz.php # VendorFoo_Bar_Baz
  5. VendorDib/
  6. Zim/
  7. Gir.php # Vendor_Dib_Zim_Gir

随着 PHP 5.3 的发布,可以使用适当的命名空间语法,并且引入了 PSR-0 以允许使用旧式的 Horde/PEAR 下划线

架构并使用新的命名空间表示法。为了便于从旧式命名到新式命名的过渡,类名中仍允许使用下划线

,这允许更广泛的使用。

  1. /path/to/src/
  2. VendorFoo/
  3. Bar/
  4. Baz.php # VendorFoo_Bar_Baz
  5. VendorDib/
  6. Zim/
  7. Gir.php # VendorDib_Zim_Gir
  8. Irk_Operation/
  9. Impending_Doom/
  10. V1.php
  11. V2.php # Irk_Operation\Impending_Doom\V2

在使用 PEAR 安装程序将源文件从 PEAR 包移动到单个中央目录的情况下,这种结构非常合理。

到来

包源不会复制到单个全局位置,而是在安装位置使用,不会来回移动。这意味着,没有

PEAR 作为 PHP 源代码的“单一主目录”。相反,有多个目录,每个包都位于每个项目的单独目录中

中间。

为了满足 PSR-0 的要求,这导致包看起来像这样:

  1. vendor/
  2. vendor_name/
  3. package_name/
  4. src/
  5. Vendor_Name/
  6. Package_Name/
  7. ClassName.php # Vendor_Name\Package_Name\ClassName
  8. tests/
  9. Vendor_Name/
  10. Package_Name/
  11. ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest

“src” 和 “tests” 目录必须包含 和 包目录名称,这些名称是 PSR-0 合规性的产物。

许多人发现这种结构比必要的更深、更重复。该提案表明,补充或取代 PSR 将比我们的 PSR 更有用

确实如此

该包如下所示:

  1. vendor/
  2. vendor_name/
  3. package_name/
  4. src/
  5. ClassName.php # Vendor_Name\Package_Name\ClassName
  6. tests/
  7. ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest

这将需要实现最初称为“面向包”的自动加载(而不是传统的“简单的类到文件自动加载”)。

定向 - 自动装载包裹

通过扩展或修改 PSR-0 来实现 - 的自动加载非常困难,因为 PSR-0 不允许在类名路径之间进行任何修改

部分。这意味着实现面向数据包的自动加载比 PSR-0 复杂得多,但是,它将使包更干净。

最初,建议遵循以下规则:

实现者必须使用两个以上的命名空间层次结构:一个名称和一个包名称。(这两个顶部

.)

名称组合缩写为 - 或 -。

实现者必须允许 - 完全限定类名的其余部分之间的路径后缀。

- 可以映射到任何目录。若要完全限定类名的其余部分,必须映射命名空间名称

对于具有相同名称的目录,必须将类名映射到以 .php 结尾的同名文件。

请注意,这意味着停止在类名中添加下划线作为目录分隔符的做法。有人可能会认为下划线应该在出现时遵循

在 PSR-0 规范中,但在文档中它们被用作 PHP 5.2 或更早版本的伪命名空间转换,因此

最好在这里删除它们。

3. 范围 3.1 目标 3.2 非目标 4.选项 4.1 最佳方案

该解决方案保留了 PSR-0 的关键功能,同时消除了更深层次的目录结构。此外,还指定了一些附加规则以使其更清晰

互操作性实现。

虽然它不涉及目录映射,但最终草案指定了自动加载程序应如何处理错误。具体来说,它禁止抛出异常或提及

这有两个原因。

PHP 中的自动加载器设计是可堆叠的,如果一个自动加载器没有加载,其他自动加载器仍然有机会继续加载。㞖

其中一个自动加载器发生错误,该过程将无法继续。

() 和 () 允许在正常自动加载后找到类或接口,如果

移动加载程序会引发异常,使 () 不可用,从互操作性的角度来看,这是不可接受的。自动加载

如果找不到该类,最好通过日志记录提供额外的调试信息,可以是符合 PSR-3 的日志记录或其他

什么。

优点:

缺点:

4.2 替代方案:仍遵循 PSR-0 标准

仍然遵循 PSR-0 标准,虽然合理,但只留下了更深层次的目录结构。

优点:

缺点:

4.3 替代方案:自动加载和转换分离

Beau 和其他人建议,可以将转换逻辑与自动加载提案分离,以便其他提案可以引用转换规则。

它们的分离将在未来通过投票和讨论来完成,合并版本(例如,嵌入自动加载提案的转换规则)优先

使用。

优点:

缺点:

4.4 替代方案:使用更多的祈使句和叙述性语言

在第二轮投票之后,发起人最常听到的投票是那些支持该想法但不同意该提案的措辞(或解释)的人,该提案已经提出了一段时间

投票扩大到更多的叙述和一些更命令性的语言,这种做法受到少数直言不讳的参与者的谴责。在那之后的一段时间

Beau 开始专注于对 PSR-0 的实验性修订,编辑和发起人更喜欢这种简洁的方法,并继续将其用于当前的审查

(由贡献最大的贡献者 Paul M. Jones 撰写)。

PHP 5.3.3 及更早版本

在 PHP 5.3.3 之前,前缀命名空间没有被删除,因此特定实例落在特定声明上。省略命名的前缀

空间可能会导致发生异常。

5. 人员5.1 编辑5.2 发起人5.3 贡献者6.投票7.相关链接

二维码
扫一扫在手机端查看

本文链接:https://by928.com/4192.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线