我有OOP编程的基本技能,我正在尝试创建一个非常简单的MVC框架。奇怪的是,当我实例化应用程序而找不到原因时,index方法会自动调用。
我的索引文件有:$app = new ();
我的鞋带看起来像这样:
class App {
private $_controller = null;
public function __construct() {
$default_controller = 'controller/index.php';
require $default_controller;
$this->_controller = new Index();
}
}以下是我的主控制器类:
class Controller {
public function loadModel($name) {
require('models/'. strtolower($name) .'.php');
$model = new $name;
return $model;
}
public function loadView($name) {
$view = new View($name);
return $view;
}
}我的主要模特课:
class Model {
public function __construct() {
$this->db = new DB(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);
}
}这是我的索引类:
class Index extends Controller {
public function index() {
$example = $this->loadModel('Index_Model');
$something = $example->content('test');
$view = $this->loadView('index');
$view->set('content', $something);
$view->render();
}
}发布于 2016-07-16 19:05:07
class Index extends Controller {
public function index() {在PHP 4中,与类的名称相同的方法充当构造函数--它仍然用作兼容性回退。
http://php.net/manual/en/language.oop5.decon.php:
“为了与PHP 3和4向后兼容,如果PHP找不到给定类的__construct()函数,而且该类没有从父类继承一个函数,它将根据类的名称搜索旧的构造函数。”
( PHP在某些方面不区分大小写,这是最重要的。)
因此,您的意思是,如果类及其方法具有相同的名称,则在实例化类时将调用该方法吗?
是。
您必须重命名该方法,或者通过名称为__construct的方法在类本身或它扩展的方法中提供构造函数。
编辑:
正如您所说的,当您深入到MVC时,您可能需要查看名称空间。正如我链接到的手册页面所进一步指出的,“从PHP 5.3.3开始,名称与名称空间类名的最后一个元素相同的方法将不再被视为构造函数。”--这样也就消除了问题。http://php.net/manual/en/language.namespaces.rationale.php
https://stackoverflow.com/questions/38414569
复制相似问题