我已经构建了一个包,它包含一个用户模型类和一个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。类型提示不匹配(用户<> UserExt),尽管UserExt是用户的子类。
我想知道什么是解决我的问题的最好办法?
我想到了一些不同的选择:
谢谢
发布于 2018-03-08 10:46:16
不要扩展UserFormatter,而是在自定义UserFormatter中调用一个UserFormatter::format,然后将其他数据合并到返回的数组中。
class UserFormatterExt
{
public static function format(UserExt $user)
{
$formattedUser = UserFormatter::format($user);
$formattedUser['role'] = $user->role;
return $formattedUser;
}
}https://stackoverflow.com/questions/49171111
复制相似问题