php – 在Codeigniter中作为Singleton的库?
我使用单例模式创建了一个自定义库.为什么这样?因为我需要能够在没有$this->的情况下调用我的函数参考,例如,我可以执行以下代码:
function foo() { MyLibrary::instance()->foo(); } 然后我可以在控制器中调用我的函数,如下所示: function foo(); 代替 $this->mylibrary->foo(); 我遇到了麻烦,因为当最好的方法是“读取”静态实例时,CodeIgniter尝试实例化我的库. 为什么我需要这样做? 我的自定义库必须从位于应用程序文件夹之外的/ plugins目录中的外部php文件注册“hooks”.看: > /申请 这是我的Loader库: class Loader{ public static $instance; protected $hooks; private function __construct($params = array()){ $this->hooks= array(); $this->includePlugins(); } public static function instance() { if (!self::$instance) { self::$instance = new Loader(); } return self::$instance; } public function includePlugins() { include_once "/plugins/helloworld.php"; } public function do_action($hook= "after") { foreach ($this->actions[$hook] as $function) { call_user_func_array($function,array()); } } public function add_action($hook,$function,$priority) { if ($hooks !== false) { $this->actions[$hook][] = $function; } else { echo "hook name is unavalaible"; } } } /** * Functions using the Singleton instance !!! */ function do_action($hook) { Loader::instance()->do_action($hook); } function add_action($hook,$priority) { Loader::instance()->add_action($hook,$priority); } 不,我的helloworld.php(插件)看起来像这样: add_action('right_here','show_message',11); function show_message() { echo "hello world!"; } 最后,我可以在我的控制器/视图中调用我的函数do_action来打印消息,如下所示: do_action('right_here'); 请注意,我的所有重要函数都由一个允许我使用单例实例的全局函数调用.但我遇到两个问题: > Codeigniter需要我的结构公开才能 解决方法
我已经解决了问题:)
要创建单例库,您必须: >将您的库包含在system / core / Codeigniter.php中,如下所示: 辛格尔顿: public static function &instance() { if (!self::$instance) { self::$instance = new Loader(); } return self::$instance; } >准备好使用您的功能.此外,您可以包括CI你库中的对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |