我试图实现我认为是工厂类的东西。我有一个API框架。在我的前端控制器处理完请求后,它会尝试将输出返回给客户端。在我的前端控制器调用看起来是这样的:工厂方法不工作:返回父类代替
<?php
...
$response_obj = new Response($response_str, 'json');
echo $response_obj->render();
?>
我Response
类基本上采用第二个参数作为类的类型实例化,并通过这种新一类$response_str
内容。那就是:
<?php
class Response {
public function __construct($data, $format) {
switch ($format) {
case 'json':
$obj = new ResponseJson($data);
break;
}
return $obj;
}
}
然后我ResponseJson
类看起来如下:
<?php
class ResponseJson {
protected $data;
public function __construct($data) {
$this->data = $data;
return $this;
}
public function render() {
header('Content-Type: application/json');
return json_encode($this->data);
}
}
然而,在我的前端控制器$response_obj
返回其类型为Response
,而不是ResponseJson
正如所预料的,和呼叫到render()
方法(存在于ResponseJson
而不是Response
)会引发致命错误:
Fatal error: Call to undefined method Response::render() in /Users/Martin/Sites/api-framework/index.php on line 61
我哪里错了?
@Kaii说什么。这里是一些关于PHP模式的简要介绍。第一个例子是一个工厂:http://php.net/manual/en/language.oop5.patterns.php – 2012-01-13 18:24:11