我已经构建了一个包(简称为这篇文章)包含一个User模型类和一个UserFormatter类。我有一个应用程序加载此包以添加一些自定义工作。
我喜欢在自定义应用程序中执行的操作是让UserFormatter在其数组中返回一个附加键。
让我首先展示一些代码,以了解我的问题':
包裹代码:
class User
{
protected $id;
protected $name;
protected $email;
}
class UserFormatter
{
public static function format(User $user)
{
return [
'email' => $user->email,
];
}
}
应用程序代码(用于覆盖某些包代码):
class UserExt extends User
{
protected $role;
}
class UserFormatterExt extends UserFormatter
{
public static function format(UserExt $user)
{
return [
'email' => $user->email,
'role' => $user->role,
];
}
}
这不符合我的想法。 PHP警告我重写格式函数中的arg。 typehint不匹配(User<> UserExt)尽管UserExt是User的子类。
我想知道什么是解决我问题的最佳解决方案?
我想到了一些不同的选择:
由于
答案 0 :(得分:0)
不要扩展UserFormatter
,而是在自定义UserFormatter中调用UserFormatter::format
,然后将其他数据合并到返回的数组中。
class UserFormatterExt
{
public static function format(UserExt $user)
{
$formattedUser = UserFormatter::format($user);
$formattedUser['role'] = $user->role;
return $formattedUser;
}
}