Fruit.php
ClassFactory.php
类工厂实现了一些简单功能,能够解析指定的配置文件,并根据配置文件生成类,同时设置指定的属性值:
config.json
//备注使用双反斜杆
[
{
//类ID,方便工厂查找
"id": "Apple",
//类名
"class_name":"Apple",
//类文件
"class_file":"Fruit.php",
//属性设置
"properties":[
{
"name":"color",
"value":"Red"
}
]
},
{
"id": "Banana",
"class_name":"Banana",
"class_file":"Fruit.php",
"properties":[
{
"name":"color",
"value":"Yellow"
}
]
}
]
test.php
为类工厂指定上述配置文件。我们可以看见,对配置文件里的不同ID,返回了不同的类实例。调用每个实例的方法,分别输出了Red和Yellow。可见,我们只需要改变配置文件的内容,就可以返回不同的类实例,而不需修改程序源代码。这就实现了简单的 IOC 或者 DI。
<?php
include_once("ClassFactory.php");
$factory = new ClassFactory("config.json");
$fruit = $factory->getBean("Apple");
echo $fruit->showColor() .'<br />';
$fruit = $factory->getBean("Banana");
echo $fruit->showColor() .'<br />';
?>
程序运行结果
- Apple Color:Red
- Banana Color:Yellow