在我的应用程序中,我有一个类Database
,其中包含一些方法和静态方法。我不希望这些方法每次都改变,但是它们的实现可以改变(例如,通过改变从SQL数据库到基于文件的解决方案的数据存储方式)。因此,在我的应用程序中,我总是会引用Database
类,并能够选择此类的实现。
// Code to select implementation for class Database
$db = new Database();
$data = $db->load();
$db->store($data);
$db = Database::defaultDatabase();
$db->store($data);
我可以在单独的文件中创建一些具有不同实现的Database
类,并根据需要包含具有所需实现的文件。但我宁愿能够从代码中选择实现。我不知道如何正确地按照良好的发展实践做到这一点。也许有些设计模式?我想到的第一件事是策略或工厂方法,但在这种情况下我没有看到这些模式的用途。
答案 0 :(得分:1)
目前我认为,最好的解决方案是PHP函数class_alias
(link to manual)。它按我想要的方式工作。我可以创建类TextFileDatabase
,MySqlDatabase
等类来实现DatabaseInterface
(或者在没有实现任何接口的情况下使用相同的方法,但DatabaseInterface
的解决方案对我来说更安全,因为我不必记住我应该实施哪些方法。在脚本开始时,我可以通过class_alias
选择默认实现。
class_alias('TextFileDatabase', 'Database');
$db = new Database();
$data = $db->load();
$db->store($data);
$db = Database::defaultDatabase();
$db->store($data);