2010-06-01 67 views
1

訪問私有函數在控制器之有道,我得到了一個被做成私有兩種功能:它是在CakePHP

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; 
        } 
     } 

我不知道這是否是訪問有道在這種情況下的私人功能。

回答

3

您正在訪問它(假設這兩種方法都在同一控制器類中),但如果您不知道,您的__avail()方法不是真正的私有方法。雙下劃線(__)前綴是一種約定,但它只是一個約定。你的「私人」方法實際上是公開的。爲了使其私密性,您需要在簽名中指定它:

private function __avail() { ... } 
+2

雙下劃線前綴不只是一個約定,CakePHP就會把這個方法,這是不一樣訪問的私有方法一個控制器的動作甚至使用PHP4。 – iwat 2010-06-01 15:03:27

+0

好的信息。我沒有意識到這種接線,並且似乎無法在任何地方找到任何參考。我只能找到它作爲一個約定引用。你能用URI引用你的源代碼嗎? – 2010-06-01 15:41:47

+1

將__用作函數的前綴是一種不好的做法。根據php文檔,PHP將所有以__開頭的函數名稱保留爲魔術。建議您不要在PHP中使用帶__的函數名稱,除非您需要一些已記錄的魔術功能。「# 因此,請避免在您的控制器函數中使用__。 – bancer 2010-06-01 22:10:18

0

您正在訪問它,但是,您沒有正確聲明該函數。

你被宣佈爲受保護 - >保護功能__avail()

來源:http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html

+0

你的意思是'protected function _avail()'(注意:只有一個下劃線) – mark 2012-09-10 14:38:48

+0

一個下劃線是NECESSARY @ mark,但是如果你想要的話,你可以使用一個或多個下劃線(就像這種情況)。不過,我建議你只用一個下劃線。 – 2012-09-17 15:22:53