2012-09-11 51 views
0

這可能是一個很小的問題,但我似乎無法在任何地方找到答案。是否可以在組件中創建自己的函數並在同一個組件中調用它?CakePHP2.0如何在組件中使用函數?

例子:

Class myComponent extends Component{ 

public function doSomething(){ 

    doThis(); 

    $b = $a + 2; 

    return $b; 

} 

function doThis(){ 

    $a = 0; 

} 

} 

回答

4

你在這裏混合了幾件事情。

  1. 通常你可以創建對象的方法這樣沒有問題。你要打電話給他們,就好像對象的方法:

    public function doSomething() { 
        $this->doThis(); 
        ... 
    } 
    
  2. 只是打電話doThis()不會奇蹟般地創造在呼叫範圍內的變量$a。該變量將在doThis內部創建,並將包含在那裏。這是一件好事。你必須明確地return從法的價值,使其可:

    public function doSomething() { 
        $a = $this->doThis(); 
        ... 
    } 
    
    protected function doThis() { 
        return 0; 
    } 
    
+0

時間編輯的問題,並張貼一個偉大的答案嗎?天啊,值得+1! – Fluffeh

+0

謝謝!這是我需要的解釋。使用你剛剛解釋的內容解決了我的問題。 –

0

變量範圍將意味着doThis函數內$a當函數結束時輸了,但你可以這樣做:

Class myComponent extends Component 
{ 
    public function doSomething() 
    { 
     $a=$this->doThis(); 
     $b = $a + 2; 
     return $b; 
    } 

    function doThis() 
    { 
     $a = 0; 
     return $a; 
    } 

} 

我可能會使用一個類這樣的財產雖然:

Class myComponent extends Component 
{ 
    public $a; 
    public function doSomething() 
    { 
     $this->doThis(); 
     $b = $this_.a + 2; 
     return $b; 
    } 

    public function doThis() 
    { 
     $this->a = 0; 
    } 

} 

Cla ss屬性是通過函數更新信息的好方法。他們可以在任何地方被整個班級使用。如果通過public聲明,如果能在類外直接通過實例像這樣使用:

$var=new myComponent(); 
// Crete a new instance of the object. 
echo $var->a; // Outputs the value. 

或者您可以使用private性能,這是對職責範圍內的對象本身可見,但看不到外面的世界(好吧,不能以任何方式訪問)。

相關問題