Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 方法在实例化该类时调用自身_Php_Model View Controller - Fatal编程技术网

Php 方法在实例化该类时调用自身

Php 方法在实例化该类时调用自身,php,model-view-controller,Php,Model View Controller,我有OOP编程的基本技能,我正在尝试创建一个非常简单的MVC框架。奇怪的是,当我实例化这个应用程序时,index方法调用了它自己,却找不出原因 我的索引文件有:$app=newapp() 我的引导程序如下所示: class App { private $_controller = null; public function __construct() { $default_controller = 'controller/index.php'; req

我有OOP编程的基本技能,我正在尝试创建一个非常简单的MVC框架。奇怪的是,当我实例化这个应用程序时,index方法调用了它自己,却找不出原因

我的索引文件有:$app=newapp()

我的引导程序如下所示:

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();
    }

}

在PHP4中,一个与类同名的方法充当构造函数,它仍然用作兼容性的后备方法

:

为了向后兼容PHP3和PHP4,如果PHP找不到给定类的_construct()函数,并且该类没有从父类继承函数,它将根据类的名称搜索旧式构造函数

(PHP在某些方面的大小写不敏感在这里排在首位。)


[来自注释]那么您的意思是,如果类及其方法具有相同的名称,那么在实例化该类时将调用该方法吗

您必须重命名该方法,或者在类本身或它扩展的类中通过名为_构造的方法提供构造函数


编辑:

正如您所说的,当您正在潜入MVC时,您可能需要研究名称空间。正如我链接到的手册页面进一步指出的,“从PHP5.3.3开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。”——这样也可以消除问题

在PHP4中,一个与类同名的方法充当构造函数,它仍然用作兼容性的后备方法。(某些方面的大小写不敏感在这里排在首位。)那么你的意思是,如果类及其方法具有相同的名称,那么在实例化该类时将调用该方法吗?但我在本地服务器上运行了PHP 5.6.10版?是的,这就是重点。这是一个向后兼容的“特性”,正如我所说,这是一个兼容性回退-PHP5模拟了旧的行为,因此在PHP4或PHP3下编写的脚本仍然可以运行,而无需对此进行修改。非常感谢!:)自PHP5.3.3以来,名称空间类就没有这个问题,所以您可能希望研究一下这些类(请参见编辑)
class Index extends Controller {

    public function index() {