PSR 8 Huggable 接口 「被拒绝」
本篇规范中的 必须,不得,需要,应,不应,应该,不应该,推荐,可能 和 可选 等词按照 [RFC 2119][RFC 2119] 中的描述进行解释
1. 概览
本规范的目的是通过标准化的跨项目间的交流和协作来提高 PHP 社区的整体友好性和合作精神
2. 规范
此规范定义了两个接口:\Psr\Hug\Huggable
and \Psr\Hug\GroupHuggable
Huggable 接口
-
一个 Huggable 对象通过调用另一个对象的
hug()
方法并传递$this
作为第一个参数来表达对另一个对象的喜爱和支持 -
被调用
hug()
方法的对象 必须 至少回调一次调用者的hug()
方法 -
两个参与拥抱的对象 可以 进行任何次数的拥抱。但是,每一个可拥抱的对象都必须具有终止条件,以防止进入无限循环。例如,一个对象可以配置为最多只允许 3 个相互拥抱,之后将打破拥抱链并返回
-
一个对象可以在被拥抱时做一些额外的动作,比如修改状态。一个常见的例子是增加一个内部幸福感或满意度计数器
GroupHuggable 接口
- 一个对象可以有选择地实现 GroupHuggable 接口来表明它可以支持一次和多个对象进行拥抱
3. 接口
HuggableInterface
所有的拥抱是相互的。拥抱的物体必须依次拥抱另一个物体 通过在第一个参数上调用hug()返回对象。所有对象都必须 实施一种机制来防止无限循环的拥抱
<?php namespace Psr\Hug; /** * 定义一个 huggable 接口 * * 一个 huggable 对象表达与另一个 huggable 对象的感情 */ interface Huggable { /** * 拥抱这个对象 * * 所有的拥抱都是相互的。 * 一个被拥抱的对象必须通过在第一个参数上调用 hug() 方法依次拥抱另一个对象 * 所有的对象 **必须** 实现一种机制防止无限循环的拥抱 * * @param Huggable $h 拥抱此对象的对象 */ public function hug(Huggable $h); }
<?php namespace Psr\Hug; /** * 定义一个 huggable 对象 * * 一个 huggable 对象表达与另一个 huggable 对象的感情 */ interface GroupHuggable extends Huggable { /** * 拥抱一序列令人讨喜的对象 * * 当被调用时,该方法 **必须** 调用每个对象的 hug() 方法 * 集合里的顺序并不重要, 它可以以任何顺序拥抱每一个对象 * * @param $huggables 实现了 Huggable 接口的对象组成的数组或迭代器 */ public function groupHug($huggables); }