gpt4 book ai didi

php - 当我实例化该类时,方法会调用自身

转载 作者:行者123 更新时间:2023-12-04 00:56:07 24 4
gpt4 key购买 nike

我有 OOP 编程的基本技能,我正在尝试创建一个非常简单的 MVC 框架。奇怪的是,当我实例化应用程序时,索引方法会调用自身,但无法找出原因。

我的索引文件有:$app = new App();

我的 Bootstrap 如下所示:

class App {

private $_controller = null;

public function __construct() {
$default_controller = 'controller/index.php';
require $default_controller;
$this->_controller = new Index();
}
}

这是我的主 Controller 类:

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

}

最佳答案

class Index extends Controller {

public function index() {

在 PHP 4 中,与类同名的方法充当构造函数 - 并且它仍然用作兼容性回退。

http://php.net/manual/en/language.oop5.decon.php :

"For backwards compatibility with PHP 3 and 4, if PHP cannot find a __construct() function for a given class, and the class did not inherit one from a parent class, it will search for the old-style constructor function, by the name of the class."

(PHP 在某些方面不区分大小写在这里是最重要的。)

[from comments] so do you mean if the class and its method have same name the method will be called when I instantiate the class?

是的。

您要么必须重命名该方法,要么通过类本身或其扩展的类中名为 __construct 的方法提供构造函数。


编辑:
正如您所说,当您深入研究 MVC 时,您可能想要研究命名空间。正如我链接到的手册页进一步所述,“从 PHP 5.3.3 开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。” - 所以这也将消除这个问题。 http://php.net/manual/en/language.namespaces.rationale.php

关于php - 当我实例化该类时,方法会调用自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38414569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com