【发布时间】:2015-12-03 06:49:36
【问题描述】:
我有一组我觉得有用的 PHP 函数。我想为它们创建一个符合 PSR-4 的存储库,但我发现的指南(1、2、3)似乎只讨论了用于自动加载的类。
例如,我的文件如下,每个文件一个函数:
my_cool_function1.php
my_cool_function2.php
... etc.
如何从它们创建符合 PSR-4 的库?
【问题讨论】:
我有一组我觉得有用的 PHP 函数。我想为它们创建一个符合 PSR-4 的存储库,但我发现的指南(1、2、3)似乎只讨论了用于自动加载的类。
例如,我的文件如下,每个文件一个函数:
my_cool_function1.php
my_cool_function2.php
... etc.
如何从它们创建符合 PSR-4 的库?
【问题讨论】:
您找不到任何关于 PSR-4 自动加载非类文件的文档的原因是,正如 specification 所述 - 它是为自动加载类而设计的。
直接取自官方规格:
此 PSR 描述了从文件路径自动加载 类 的规范。它是完全可互操作的,并且可以与任何其他自动加载规范(包括 PSR-0)一起使用。此 PSR 还描述了将根据规范自动加载的文件的放置位置。
更具体地说;
术语“类”是指类、接口、特征和其他类似的 结构。
具有函数的文件并不是真正相似的结构。
要自动加载这些文件,您需要使用 files 自动加载:
"autoload": {
"files": [
"src/my_cool_function1.php",
"src/my_cool_function2.php"
],
"psr-4": {
"SomeNamespace\\": "src/YourNamespace/"
}
}
您会注意到,psr-4 规范(通常)映射到命名空间。
【讨论】:
my_lib/function1.php,然后像这样命名它:<?php namespace my_lib; function function1() {}?
VendorName\PackageName。仅包含函数的文件(即不是类或类似的结构化文件)不会被命名空间。检查示例github.com/php-fig/fig-standards/blob/master/accepted/…
别忘了你可以在类中使用静态函数以便 PSR-4 加载它们
class MyClass {
public static my_cool_function1() {}
}
然后您可以使用冒号运算符将它们作为普通函数调用:
MyClass::my_cool_function1() {}
【讨论】: