hoa / consistency
Hoa\Consistency 库。
Requires
- php: >=7.1
Requires (Dev)
- hoa/stream: ~2.0
- hoa/test: ~3.0
This package is auto-updated.
Last update: 2021-09-20 08:30:27 UTC
README
Hoa 是一套 模块化、可扩展 和 结构化 的 PHP 库。
此外,Hoa 致力于成为工业界和研究界之间的桥梁。
Hoa\Consistency
这个库在 PHP 虚拟机和库之间提供了一个薄层,以确保虚拟机版本和库版本之间的一致性。
了解更多.
安装
使用 Composer,要将此库包含到依赖项中,您需要要求 hoa/consistency
$ composer require hoa/consistency '~2.0'
有关更多安装程序,请阅读源代码页面。
测试
在运行测试套件之前,必须安装开发依赖项
$ composer install
然后,运行所有测试套件
$ vendor/bin/hoa test:run
有关更多信息,请阅读贡献指南。
快速使用
我们提出了一个关于一致性 API 如何确保前向和后向兼容性的快速概述,以及关于 PSR-4 自动加载器 和 xcallable API 的概述。
前向和后向兼容性
Hoa\Consistency\Consistency
类确保前向和后向兼容性。
带有关键字的示例
Hoa\Consistency\Consistency::isKeyword
检查一个特定的单词是否被 PHP 保留。假设您当前的 PHP 版本不支持 callable
关键字或类型声明,如 int
、float
、string
等,则 isKeyword
方法将告诉您它们是否为保留关键字:不仅对于您的当前 PHP 版本,而且可能在未来的版本中。
$isKeyword = Hoa\Consistency\Consistency::isKeyword('yield');
这可以避免编写可能会在未来崩溃或在边缘用户中运行的算法。
带有标识符的示例
PHP 标识符由一个正则表达式定义。它可能在将来发生变化。为了防止破坏您的算法,您可以使用 Hoa\Consistency\Consistency::isIdentifier
方法来检查一个标识符是否根据当前 PHP 版本正确。
$isValidIdentifier = Hoa\Consistency\Consistency::isIdentifier('foo');
灵活实体
灵活实体非常简单。如果我们将 Foo\Bar\Bar
声明为灵活实体,我们就可以使用 Foo\Bar\Bar
或 Foo\Bar
名称来访问它。这在您的架构演变但希望保持向后兼容性时非常有用。例如,您通常会在 Foo/Bar/Exception.php
文件中创建一个 Foo\Bar\Exception
类。但经过几版之后,您可能意识到需要引入其他异常,因此需要创建一个 Exception
目录。在这种情况下,Foo\Bar\Exception
应该移动到 Foo\Bar\Exception\Exception
。如果这个后者被声明为灵活实体,向后兼容性将得到保持。
Hoa\Consistency\Consistency::flexEntity('Foo\Bar\Exception\Exception');
另一个例子是“入口类”(非正式命名)。Hoa\Consistency\Consistency
是一个很好的例子。使用 Hoa\Consistency
而不是 Hoa\Consistency\Consistency
更方便。这是因为这是一个灵活实体。
可抛出异常 & 同伴。
Throwable
接口已被引入以表示 PHP 中的一个全新的异常架构。因此,为了与即将到来的 PHP 版本兼容,您可能需要在某些情况下使用此接口。希望如果它不存在,将为您创建 Throwable
接口。
try { … } catch (Throwable $e) { … }
自动加载器
Hoa\Consistency\Autoloader
是一个与 PSR-4 兼容 的自动加载器。它的工作方式如下
- 使用
addNamespace
将命名空间前缀映射到目录 - 使用
register
注册自动加载器
API 还提供了 load
方法强制加载实体,unregister
注销自动加载器,getRegisteredAutoloaders
获取所有已注册自动加载器的列表等。
例如,将 Foo\Bar
命名空间映射到 Source/
目录
$autoloader = new Hoa\Consistency\Autoloader(); $autoloader->addNamespace('Foo\Bar', 'Source'); $autoloader->register(); $baz = new Foo\Bar\Baz(); // automatically loaded!
Xcallable
Xcallables 是“扩展调用者”。这是一个统一调用任何类型调用者的 API,并扩展了 Hoa 的某些 API(如 Hoa\Event
或 Hoa\Stream
)。它理解以下类型
'function'
作为字符串'class::method'
作为字符串'class', 'method'
作为两个字符串参数$object, 'method'
作为两个参数$object, ''
作为两个参数,未知“able”function (…) { … }
作为闭包['class', 'method']
作为字符串数组[$object, 'method']
作为数组
要使用它,只需实例化 Hoa\Consistency\Xcallable
类并将其用作函数
$xcallable = new Hoa\Consistency\Xcallable('strtoupper'); var_dump($xcallable('foo')); /** * Will output: * string(3) "FOO" */
Hoa\Consistency\Xcallable::distributeArguments
方法调用调用者,但参数作为数组传递
$xcallable->distributeArguments(['foo']);
也可以获取调用者的唯一哈希值
var_dump($xcallable->getHash()); /** * Will output: * string(19) "function#strtoupper" */
最后,可以获取当前调用者的反射实例(可以是 ReflectionFunction
、ReflectionClass
、ReflectionMethod
或 ReflectionObject
)
var_dump($xcallable->getReflection()); /** * Will output: * object(ReflectionFunction)#42 (1) { * ["name"]=> * string(10) "strtoupper" * } */
当对象已设置但方法未设置时,如果可能,将推导出该方法。如果对象是 Hoa\Stream
类型,则根据传递给调用者的参数类型,将使用 writeInteger
、writeString
、writeArray
等方法。如果参数是 Hoa\Event\Bucket
类型,则根据事件桶中的数据推导出方法名称。这非常方便。例如,以下示例将无缝工作
Hoa\Event\Event::getEvent('hoa://Event/Exception') ->attach(new Hoa\File\Write('Exceptions.log'));
Hoa\Event\Event
上的attach
方法将其参数转换为xcachable。在这种情况下,要调用的方法未知,我们只有对象(类型为Hoa\File\Write
)。然而,因为这是一个流,该方法将根据在hoa://Event/Exception
事件通道上触发的event bucket
中的数据进行推断。
文档
Hoa\Consistency
的“黑客手册”包含了关于如何使用此库以及它是如何工作的详细信息。
要本地生成文档,请执行以下命令
$ composer require --dev hoa/devtools $ vendor/bin/hoa devtools:documentation --open
更多文档可以在项目网站上找到:[hoa-project.net](https://hoa-project.net/).
获取帮助
主要有两种方式来获取帮助
- 在
#hoaproject
IRC频道上, - 在users.hoa-project.net论坛上。
贡献
你想贡献力量吗?谢谢!详细的贡献指南解释了你需要知道的一切。
许可证
Hoa遵循新BSD许可证(BSD-3-Clause)。请参阅LICENSE
以获取详细信息。