Php CodeIgniter post_控制器_构造函数挂钩运行两次?
我在application\config\hooks.php中有这段代码Php CodeIgniter post_控制器_构造函数挂钩运行两次?,php,codeigniter,hook,Php,Codeigniter,Hook,我在application\config\hooks.php中有这段代码 $hook['post_controller_constructor'] = array( 'class' => 'maintenance', 'function' => 'maintenance', 'filename' => 'maintenance.php', 'filepath' => 'hooks', 'params' => array() ); 这段代码位于application
$hook['post_controller_constructor'] = array(
'class' => 'maintenance',
'function' => 'maintenance',
'filename' => 'maintenance.php',
'filepath' => 'hooks',
'params' => array()
);
这段代码位于application\hooks\maintenance.php中
class maintenance
{
var $CI;
public function maintenance()
{
echo "Test";
}
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['maintenance'] = true;
这段代码位于application\config\config\u maintenance.php中
class maintenance
{
var $CI;
public function maintenance()
{
echo "Test";
}
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['maintenance'] = true;
好的,问题在于维护类和钩子定义。您可以调用hookmaintenance
和函数maintenance
。如果您以与类相同的方式命名方法,那么此方法就是类构造函数。继续并重命名您的方法:
hooks.php
$hook['post_controller_constructor'] = array(
'class' => 'maintenance',
'function' => 'differentName',
'filename' => 'maintenance.php',
'filepath' => 'hooks',
'params' => array()
);
class maintenance
{
var $CI;
public function differentName()
{
echo "Test";
}
}
maintenance.php
$hook['post_controller_constructor'] = array(
'class' => 'maintenance',
'function' => 'differentName',
'filename' => 'maintenance.php',
'filepath' => 'hooks',
'params' => array()
);
class maintenance
{
var $CI;
public function differentName()
{
echo "Test";
}
}
您的控制器(或其中一个)是什么样子的?并且您没有意外地在主视图中回显“Test”(测试);)不,我不是,如果我将测试更改为其他内容,它会得到两次回显,我在public maintenance()函数中放置的任何内容都会得到两次回显。我假设。。。我要测试一下,马上回来谢谢!这就解决了问题。我没有注意到,如果函数与类同名,它会被调用两次:)这里的问题是,您调用了方法“maintenance”,它是类构造函数。类构造函数在类安装时自动调用。然后CodeIgniter调用方法maintenance
,忽略它是类构造函数这一事实。所以请记住,如果您将一个方法命名为与类相同的方法,那么这个方法就是类构造函数。更好地使用\u construct()
作为类构造函数虽然我不擅长解释,但抱歉8)想知道如何访问我的控制器,并认为$CI变量在这里发挥了神奇的作用。。。但只需添加一个$CI=&get_instance();去拿!