Php 来自Codeigniter的短功能';s图书馆

Php 来自Codeigniter的短功能';s图书馆,php,codeigniter,tankauth,Php,Codeigniter,Tankauth,我的Codeigniter软件包中安装了一个Tank Auth库,问题是我不喜欢如何is\u logged\u in函数需要调用,因为它很长而且不友好,因为我需要使用: $this->tank\u auth->is\u logged\u in() 每次我想检查用户是否登录。。。 那么有没有办法把它缩短呢?通过说shorter,我的意思是类似于$this->logged() 如果有人能帮助我,我将不胜感激 谢谢。进入tank\u auth库,定义一个新的公共功能: public function

我的Codeigniter软件包中安装了一个Tank Auth库,问题是我不喜欢如何
is\u logged\u in
函数需要调用,因为它很长而且不友好,因为我需要使用:

$this->tank\u auth->is\u logged\u in()

每次我想检查用户是否登录。。。 那么有没有办法把它缩短呢?通过说shorter,我的意思是类似于
$this->logged()

如果有人能帮助我,我将不胜感激


谢谢。

进入
tank\u auth
库,定义一个新的公共功能:

public function logged(){
    return $this->is_logged_in();
}
您现在可以使用
$this->tank_auth->logged()访问它

如果要缩短
tank\u auth
的名称,则必须重命名该类和文件名

更新: 更重要的问题是,为什么你这么多次打这个电话,以至于它变得很烦人?如果你的代码遵循了不重复自己的原则,你应该只需要写一次


看看菲尔·斯特金的博客文章,标题是。他将向您展示如何编写所有控制器都将从中继承的基本控制器。如果在基本控制器的构造函数中写入登录检查,则不必在每个控制器中都写入登录检查。

我反对这样做,因为实例中的方法
logged()
缺少上下文。但是,如果您想这样做,您可以编写一个基本控制器,它有一个
logged()
方法,最终返回
$this->tank\u auth->is\u logged\u in()
。所有控制器都将从这个基本控制器继承,这一点从一开始就不是个坏主意


如果您正在使用库,您可以在库中实现类似的模式。

如果不创建库,您可能不想编辑库中的任何内容,因为这样做会影响库的可更新性。相反,您可以向控制器添加一个名为
logged
的方法,并让它联系到Tank Auth。尽管如此,正如前面的回答所指出的,我会为你的函数选择一个更好的名称

创建或编辑控制器基类,使其具有如下内容:

function is_logged() {
   return $this->tank_auth->is_logged_in();
}

然后你可以这样称呼它:
$this->is_logged()

我想他们的意思是省略
->tank\u auth
部分。是的,我知道我可以在控制器中使用另一个函数,但我更希望对更全局的函数感兴趣,因为我希望对其他一些tank auth函数也这样做。当然,但是有可能自动加载控制器吗?您可以创建一个助手并自动加载该助手。