加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在Codeigniter中作为Singleton的库?

发布时间:2020-12-13 16:45:48 所属栏目:PHP教程 来源:网络整理
导读:我使用单例模式创建了一个自定义库.为什么这样?因为我需要能够在没有$this-的情况下调用我的函数参考,例如,我可以执行以下代码: function foo() { MyLibrary::instance()-foo(); } 然后我可以在控制器中调用我的函数,如下所示: function foo(); 代替 $thi
我使用单例模式创建了一个自定义库.为什么这样?因为我需要能够在没有$this->的情况下调用我的函数参考,例如,我可以执行以下代码:

function foo() {
    MyLibrary::instance()->foo();        
}

然后我可以在控制器中调用我的函数,如下所示:

function foo();

代替

$this->mylibrary->foo();

我遇到了麻烦,因为当最好的方法是“读取”静态实例时,CodeIgniter尝试实例化我的库.

为什么我需要这样做?

我的自定义库必须从位于应用程序文件夹之外的/ plugins目录中的外部php文件注册“hooks”.看:

> /申请
> / plugins
> /plugins/helloworld.php

这是我的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中,如下所示:
require_once( “/路径/到/ library.php”);
>让你的实例返回&符号,像这样:

辛格尔顿:

public static function &instance()
{
    if (!self::$instance)
        {
            self::$instance = new Loader();
        }

        return self::$instance;
}

>准备好使用您的功能.此外,您可以包括CI你库中的对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读