代码点火器的短函数';的图书馆


Short functions from a Codeigniter's library

我在Codeigniter包中安装了一个Tank Auth库,问题是我不喜欢如何调用is_logged_in函数,因为它很长,而且不太友好,因为我需要使用:

$this->tank_auth->is_logged_in()

每次我想检查用户是否登录。。。那么有没有办法让它变短呢?我说的更短是指类似$this->logged();的东西?

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

谢谢。

进入tank_auth库并定义一个新的公共函数:

public function logged(){
    return $this->is_logged_in();
}

您现在可以使用$this->tank_auth->logged(); 访问它

如果要缩短tank_auth的名称,则必须重命名类和文件名。

更新:

更重要的问题是,为什么你这么多次这样称呼它,以至于它变成了一种烦恼?如果您的代码遵循Don't Repeat Yourself(DRY)原则,那么您只需要编写一次。

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

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

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

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

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

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

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