已达到最大嵌套级别100,正在中止!-PHP
致命错误:已达到最大函数嵌套级别“100”,正在中止!在第4行的C:\wamp\www\int\system\core\Controller.php中已达到最大嵌套级别100,正在中止!-PHP,php,class,Php,Class,致命错误:已达到最大函数嵌套级别“100”,正在中止!在第4行的C:\wamp\www\int\system\core\Controller.php中 Call Stack # Time Memory Function Location 1 0.0004 364608 {main}( ) ..\index.php:0 2 1.0350 433152 Bootstrap->__construct( ) ..\index.php:11 3 1.03
Call Stack
# Time Memory Function Location
1 0.0004 364608 {main}( ) ..\index.php:0
2 1.0350 433152 Bootstrap->__construct( ) ..\index.php:11
3 1.0355 438536 Welcome->__construct( ) ..\Bootstrap.php:7
4 1.0355 438536 Controller->__construct( ) ..\welcome.php:4
5 1.0356 438680 View->__construct( ) ..\Controller.php:4
6 1.0356 438680 Controller->__construct( ) ..\View.php:4
错误行:
<?php
class Controller {
function __construct() {
$this->view = new View(); // Error starts here
$this->model = new Model();
$this->tpl = new Template();
$this->input = new Input();
$this->lib = new Library();
$this->session = new Session();
}
}
?>
在模型中:
function __get($key)
{
$fw =& Controller::get_instance();
return $fw->$key;
}
这是因为
View
的构造函数调用Controller
的构造函数,反之亦然。您需要重构代码以删除循环引用
我个人认为没有理由认为视图需要创建控制器,甚至不需要了解控制器。控制流应该是单向的:从控制器到视图
如果需要将控制器的功能注入视图,可以为其分配回调。像这样:
class Controller {
function __construct() {
$this->view = new View();
$this->view->setFooFunction(function() {
// do some stuff
});
echo $this->view->render();
}
}
class View {
protected $foo_function;
public function __construct() {
// ... no controller required :)
}
public function setFooFunction(Closure $function) {
$this->foo_function = $function;
}
public function render() {
$this->foo_function->__invoke();
...
}
}
这是因为
View
的构造函数调用Controller
的构造函数,反之亦然。您需要重构代码以删除循环引用
我个人认为没有理由认为视图需要创建控制器,甚至不需要了解控制器。控制流应该是单向的:从控制器到视图
如果需要将控制器的功能注入视图,可以为其分配回调。像这样:
class Controller {
function __construct() {
$this->view = new View();
$this->view->setFooFunction(function() {
// do some stuff
});
echo $this->view->render();
}
}
class View {
protected $foo_function;
public function __construct() {
// ... no controller required :)
}
public function setFooFunction(Closure $function) {
$this->foo_function = $function;
}
public function render() {
$this->foo_function->__invoke();
...
}
}
我假设你的一个循环坏了…找出视图构造函数试图构造控制器的原因。你的
视图
和控制器
之间有一个循环引用。我需要它能够将$this->View、$this->model等连接到视图和模型中。视图+模型控制器(以及该文件中的所有其他控制器)不扩展控制器,但我希望能够在视图/模型中使用它们,因此我尝试扩展控制器,我知道它不想玩得很好。正如其他人所建议的,这是一个设计问题。你考虑过其他的方法吗?很明显,您遇到了一堵墙,为什么不直接从等式中删除这堵墙呢?我假设您的一个循环坏了……找出视图构造函数试图构造控制器的原因。您的视图
和控制器
之间有一个循环引用。我需要它来连接$this->视图,将$this->model等转换为视图和模型。视图+模型控制器(以及该文件中的所有其他控制器)不扩展控制器,但我希望能够在视图/模型中使用它们,因此我尝试扩展控制器,我知道它不想玩得很好。正如其他人所建议的,这是一个设计问题。你考虑过其他的方法吗?很明显,您遇到了一堵墙,为什么不直接从等式中删除这堵墙呢?它背后的要点是能够从内部视图和模型中使用$this->view、$this->model等等。它在控制器中工作良好,只是不在视图/模型中。如果您的模型与视图通信,则您会遇到严重的设计问题。事实并非如此,但我希望能够调用控制器定义的$this->{method},例如库、输入、会话等。您需要从视图中删除新控制器()
:\uu construct()
我确实删除了它,但是我如何调用$this->input?例如,它背后的要点是能够从内部视图和模型中使用$this->View、$this->model等。它在控制器中工作良好,只是不在视图/模型中。如果您的模型与视图通信,则您会遇到严重的设计问题。事实并非如此,但我希望能够调用控制器定义的$this->{method},例如库、输入、会话等。您需要从视图中删除新控制器()
:\uu construct()
我确实删除了它,但是如何调用$this->input呢?