hansel23/dictionaries

此包已被废弃,不再维护。未建议替代包。

具有界面的字典。它基于其他著名语言的 Dictionary 类型,具有严格的类型。

v1.0.8 2016-06-10 07:22 UTC

This package is auto-updated.

Last update: 2023-10-23 21:13:44 UTC


README

Build Status Coverage Status Latest Stable Version Latest Unstable Version Total Downloads License

字典

字典类型。键和值具有强类型,因此您将知道您得到的是什么。

使用方法

假设您有一个具有成员数据成员的类,称为 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] );
?>

另一件好事是,您现在可以更好地为您的数组进行类型提示。想象一下,您创建了一个具有需要数组作为参数的公共方法的接口。但您期望数组中的对象具有特定的类型。当然,您可以提示数组,但您真的希望每个人都给您正确的数组吗?或者您想在实现中验证数组中对象的正确类型?

这样做会更好

  1. 创建一个新的 Dictionary 类,例如 MemberDictionary
  2. 扩展 AbstractDictionary。
  3. 在您的 IDE 中为键和值添加类型提示
  4. 使用您自己的字典作为类型提示!

如下所示

<?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;
    }
}