Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 CodeIgniter post_控制器_构造函数挂钩运行两次?_Php_Codeigniter_Hook - Fatal编程技术网

Php CodeIgniter post_控制器_构造函数挂钩运行两次?

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

我在application\config\hooks.php中有这段代码

$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;

好的,问题在于维护类和钩子定义。您可以调用hook
maintenance
和函数
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();去拿!