CodeIgniter - 私有函数

时间:2012-04-22 08:07:07

标签: codeigniter

我现在开始玩CodeIgniter了。 我使用他们的用户指南和其他可用于学习的第三方教程。我对私人功能的命名有些困惑。基于the user guide,我必须在私有函数的名称前加_前缀。但是in this tutorial,请检查添加注销部分。其中有一个私有函数:private function check_isvalidated()。这里,它没有前缀字符_

那么这也是一个公认的命名惯例? 与此同时,另一个名为_output()Processing Output。 它是一个公共函数,具有私有函数的命名约定!

当我尝试系统地学习时,这有点令人困惑。

2 个答案:

答案 0 :(得分:30)

_前缀是CONTROLLER中定义的函数的约定。

用户指南说:

  

在某些情况下,您可能希望某些功能对公共访问隐藏。要将函数设为私有,只需添加下划线作为名称前缀,它将不会通过URL请求提供。

http://www.codeigniter.com/user_guide/general/controllers.html#private-methods

添加_是CodeIgniter自己在控制器中声明函数的方法(仅在控制器中),用户无法直接调用:

  • Controller个函数会映射到网址的各个部分(controller/function
  • 控制器中有些功能不应映射到URL

    - they are declared as `private` (available since PHP5)
    OR
    - their names start with `_` (works also for PHP4)
    

关于_output函数,它是公共的,但不能直接调用,因为它包含_

为什么要公开?

该函数由系统调用,因此需要从类外部访问,它不是私有函数。但是,它包含_以确保不通过URL调用它。

总而言之,如果您的控制器中有不希望通过URL直接调用的功能,请添加_前缀或使用private访问运算符。他们中的任何一个都足够好。

仅供参考,Yii或Zend框架等其他框架对所有可通过URL调用的控制器函数使用action前缀(已映射)。

答案 1 :(得分:4)

虽然用户指南确实说您必须在控制器中使用下划线为私有函数添加前缀,但并非必须这样做。虽然遵循惯例可能是个好主意,但建议您这样做。

如果访问修饰符为public,则可以看到使用下划线为函数名称添加前缀时的显着效果。在这种情况下,如果您尝试通过URL访问该功能,则会出现404错误。但是在这种情况下,您将访问修饰符设置为private,如果您在函数名前加下划线,则无关紧要。

  

但在本教程中,请查看“添加注销”部分。在其中,有一个   private函数:private function check_isvalidated()。这里是   没有前缀字符_。

在该教程中,函数名称不以下划线为前缀,但它是一个私有函数,因为它被声明为一个。因此,尝试通过URL访问它将无法正常工作。

  

同时,还有另一个名为_output():Processing   输出。它是一个具有私有命名约定的公共函数   功能!

我已经解释了这一点,但我想指出_output()函数是在脚本执行期间在某个点调用的特殊函数之一。在这种情况下,CodeIgniter将在函数结束时调用此函数,正好是在向浏览器输出内容时。