11

我现在开始玩 CodeIgniter。我使用他们的用户指南和其他可用于学习的第三方教程。我有点纠结于私有函数的命名。根据用户指南,我必须_在私有函数的名称中加上前缀 a。但在本教程中,请检查添加注销部分。其中,有一个私有函数:private function check_isvalidated(). 在这里,它没有以字符 为前缀_

所以这也是一个公认的命名约定?同时,还有一个叫_output()Processing Output。这是一个具有私有函数命名约定的公共函数!

当我尝试以系统的方式学习时,这有点令人困惑。

4

2 回答 2

32

_前缀是定义在CONTROLLER.

用户指南说:

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

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

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

  • Controller函数映射到部分 URL ( 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 框架,action对所有可以通过 URL 调用(映射)的控制器函数使用前缀。

于 2012-04-22T08:35:15.877 回答
4

虽然用户指南确实说您必须在控制器内的私有函数的函数名称前加上下划线,但这并不是强制性的。不过,遵循约定可能是个好主意,建议您这样做。

如果访问修饰符是public. 在这种情况下,如果您尝试通过 URL 访问该功能,则会出现404错误。但是在这种情况下,是否将访问修饰符设置为private它并不重要,是否在函数名称前加上下划线。

但在本教程中,请检查添加注销部分。其中,有一个私有函数:私有函数check_isvalidated()。在这里,它没有以字符 _ 为前缀。

在那个教程中,函数名没有下划线前缀,但它是一个私有函数,因为它被声明为一个。因此,尝试通过 URL 访问它是行不通的。

同时,还有一个叫_output():处理输出。这是一个具有私有函数命名约定的公共函数!

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

于 2012-04-22T08:41:55.653 回答