hansel23 / dictionaries
此包已被废弃,不再维护。未建议替代包。
具有界面的字典。它基于其他著名语言的 Dictionary 类型,具有严格的类型。
v1.0.8
2016-06-10 07:22 UTC
Requires
- php: >=5.5
Requires (Dev)
- codeception/codeception: 2.*
- satooshi/php-coveralls: dev-master
README
字典
字典类型。键和值具有强类型,因此您将知道您得到的是什么。
使用方法
假设您有一个具有成员数据成员的类,称为 Member。成员有一个姓名、姓和年龄。要标识一个成员,您有 MemberId 类型。
现在您想要一个可以放入成员的数组。现在,通过使用 MemberId 访问数组以获取特定成员的信息是一个好主意。但您不能将 MemberId 设置为键。
使用 Dictionary 类型,这个问题已经成为历史!
您只需创建一个以 MemberId 为键、Member 为值的 Dictionary,如下所示
<?php
$members = new Dictionary( MemberId::class, Member::class );
?>
现在您可以像这样将您的成员添加到字典中
<?php
$members->add($memberId, $member);
?>
其中 $memberId 是 MemberId 类型,$member 是 Member 类型。
但您也可以像在普通数组中添加一个正常键值对(字符串/整数)一样添加一个成员标识符。
<?php
$members[$memberId] = $member;
?>
注意:您的 IDE 可能会将其标记为错误,但代码将正常运行!
现在,如果您的字典中已填充了成员,您可以执行以下操作
<?php
foreach( $members as $memberId => $member )
{
printf( "Id: %s, Name: %s %s, $memberId->toString(), $member->getFirstName(), $member->getLastName() );
}
?>
或者您想通过成员 ID 获取字典中的特定成员
<?php
print_r( $members[$memberId] );
?>
另一件好事是,您现在可以更好地为您的数组进行类型提示。想象一下,您创建了一个具有需要数组作为参数的公共方法的接口。但您期望数组中的对象具有特定的类型。当然,您可以提示数组,但您真的希望每个人都给您正确的数组吗?或者您想在实现中验证数组中对象的正确类型?
这样做会更好
- 创建一个新的 Dictionary 类,例如 MemberDictionary
- 扩展 AbstractDictionary。
- 在您的 IDE 中为键和值添加类型提示
- 使用您自己的字典作为类型提示!
如下所示
<?php
use Hansel23/Dictionaries/Dictionary;
/**
* @method MemberId key()
* @method Member current()
**/
final class MemberDictionary extends AbstractDictionary
{
protected function getNameOfKeyType()
{
return MemberId::class;
}
protected function getNameOfValueType()
{
return Member::class;
}
}
?>
提示:您还可以在字典中使用标量类型!请参阅以下示例
<?php
final class StringIntegerDictionary extends Dictionary
{
private $keyType;
private $valueType
public function __construct()
{
parent::__construct();
$this->keyType = gettype( 1 );
$this->valueType = gettype( '' );
}
protected function getNameOfKeyType()
{
return $this->keyType;
}
protected function getNameOfValueType()
{
return $this->valueType;
}
}