在cakePHP中访问私有函数是否合适

在cakePHP中访问私有函数是否合适,cakephp,Cakephp,在控制器中,我得到了两个函数,其中一个函数是私有的: function toavail(){ $this->autoRender=false; $result2=$this->__avail(); if($result2==0){return "OK";} else{return 0;}

在控制器中,我得到了两个函数,其中一个函数是私有的:

function toavail(){ 
             $this->autoRender=false;                
             $result2=$this->__avail();                  
              if($result2==0){return "OK";}
              else{return 0;}                                                  
        }

function __avail(){  
              $result1=$this->Site1->findByusername('1');  
               if($result1){
                return 1;
                            }
               else{
                 return 0;
                   }
        } 

我不确定在这种情况下它是否是访问私有函数的正确方法。

您正确地访问了它(假设两个方法在同一个控制器类中),但如果您不知道,您的
\u avail()
方法并不是真正私有的。双下划线前缀是一种约定,但它只是一种约定。你的“私有”方法实际上是公开的。要使其私有化,您需要在签名中指定:

private function __avail() { ... }

您正确地访问了它,但是没有正确地声明函数

您应该将其声明为protected->protected function\uuuu avail()


来源:

双下划线前缀不仅仅是一种约定,CakePHP会将此方法视为私有方法,即使使用PHP4也无法作为控制器的操作访问。好信息。我不知道那条线路,似乎在任何地方都找不到它的任何参考资料。我只能发现它被引用为一种惯例。你能用URI引用你的源代码吗?用_uu作为函数的前缀是不好的做法。根据php文档
php保留所有以_u开头的函数名。在PHP中,建议不要将函数名与uuu一起使用,除非您需要一些文档化的神奇功能。
因此,避免在控制器函数中使用uuu。@bancer今晚可能是真的,但核心蛋糕文件中满是“uuu”functions@Angel:这是很久以前为PHP4实施的。现在没有人会重复了。你的意思是
受保护的函数\u avail()
(注意:只有一个下划线)一个下划线是@mark所必需的,但是如果你愿意,你可以使用一个或多个下划线(如本例所示)。然而,我建议只使用一个下划线,就像你说的那样。