我正在开发一个PHP CMS,我对灵活和“可扩展”架构有疑问。
我希望允许用户“扩展”系统中的每个类。
例如,如果我有课程User
:
<?php
namespace MyCMSName\Extensions\Users;
class User
{
public function getUserAvatar()
{
// return file path, for example
}
}
现在我想对用户头像做点什么。例如,为每个用户返回不同的图像。
<?php
namespace MyCMSName\Extensions\FakeUserAvatars;
class User extends MyCMSName\Extensions\Users\User
{
public function getUserAvatar()
{
// return another path
}
}
但是在系统的某个地方我有用户对象构建。我需要创建FakeUserAvatars\User
,而不是原始Users\User
对象。
...
$user = new (? How can I determine which class to construct?)
我应该创建一些关于地图«原始类→扩展类»的东西,然后在安装新扩展时生成它吗?然后我可以获得超载原始的类并创建新实例。但是自动加载呢?似乎我应该有自定义函数来加载系统中的每个类,如果我想使它“可扩展”。
你怎么看? 对不起,如果我写错了,英语不是我的母语......