hoa/consistency

该包已被弃用且不再维护。未建议替代包。

Hoa\Consistency 库。

2.17.08.29 2017-08-29 13:46 UTC

README

Hoa

Build status Code coverage Packagist License

Hoa 是一套 模块化可扩展结构化 的 PHP 库。
此外,Hoa 致力于成为工业界和研究界之间的桥梁。

Hoa\Consistency

Help on IRC Help on Gitter Documentation Board

这个库在 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 关键字或类型声明,如 intfloatstring 等,则 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\BarFoo\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\EventHoa\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"
 */

最后,可以获取当前调用者的反射实例(可以是 ReflectionFunctionReflectionClassReflectionMethodReflectionObject

var_dump($xcallable->getReflection());

/**
 * Will output:
 *     object(ReflectionFunction)#42 (1) {
 *       ["name"]=>
 *       string(10) "strtoupper"
 *     }
 */

当对象已设置但方法未设置时,如果可能,将推导出该方法。如果对象是 Hoa\Stream 类型,则根据传递给调用者的参数类型,将使用 writeIntegerwriteStringwriteArray 等方法。如果参数是 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/).

获取帮助

主要有两种方式来获取帮助

贡献

你想贡献力量吗?谢谢!详细的贡献指南解释了你需要知道的一切。

许可证

Hoa遵循新BSD许可证(BSD-3-Clause)。请参阅LICENSE以获取详细信息。