【发布时间】:2016-05-27 18:55:39
【问题描述】:
我有一个很奇怪的问题,我不知道这是否是由于call_user_func_array 造成的。
在 PHP 5.4 上测试
当前设置
例如,我有一个 AuthController 类,它扩展了一个名为 Controller 的基本控制器:
class AuthController extends Controller
{
public function login() {
return Response::json(array('error' => false, 'message' => 'I\'m in AuthController@login'));
}
}
在扩展的Controller 类中,我有一个构造函数,用于设置例如数据库连接(我添加了一个 var_dump + exit 用于测试目的):
class Controller
{
protected $db;
protected function __construct() {
$database = Config::env('database');
var_dump($database);
exit;
}
}
现在拨打AuthController,我正在使用call_user_func_array
call_user_func_array(array($controller, $route['action']), $data);
现在应该发生什么:
应该发生的事情是Controller 的构造函数应该已经触发,在屏幕上产生一个转储并退出执行。
改为:
相反,我实际上是从AuthController 的登录方法Response::json() 获得响应。
Controller 的构造函数永远不会被触发。
我很难理解为什么它不起作用,因为 PHP 手册指出构造函数会在每个新对象实例上触发,并且如果父类有构造函数并且子类没有覆盖它,则父类类构造函数被自动调用。
call_user_func_array 不会自动触发父类构造函数,还是我完全误解了 PHP 构造函数?
【问题讨论】:
-
你在哪里实例化
AuthController?什么是$controller,一个实例或字符串"AuthController"?您是否在孩子中覆盖了__construct,或者它只是您显示的内容?
标签: php constructor