2010-05-23 124 views
1

我需要做些什麼來在函數innerOne中調用$ this-> two()?這是可能的PHP OOP?如何訪問PHP OOP中的函數

這裏是我recieving錯誤:

Fatal error: Using $this when not in object context 

這裏是我的代碼的外觀:

class myClass { 

    function one(){ 

     function innerOne() { 
      // Some code 
      $this->two($var1, $var2); 
     } 

     // Some code 

     innerOne(); 

    } 

    function two($var1, $var2) { 
    // Does magic with passed variables 
     return $var1 . $var2; 
    } 


} 

回答

2

試試這個:

function innerOne($t) { 
    //some code... 
    $t->two($var1, $var2); 
} 

innerOne($this); 
+0

感謝的人!我用你的例子,在盒子外面思考一下,並能解決它!如果有人想知道,請在我原來的帖子中發佈我的解決方案非常感謝! – Industrial 2010-05-23 18:16:04

+1

@Industrial:請確保也接受這個答案。 – BoltClock 2010-05-23 18:17:54

+1

當然,我在寫評論時無法接受它。 「接受這個答案之前,你必須等待2分鐘」是一個非常棒的信息 - 不是每天都能很快得到答案。雅各布的大佬們! – Industrial 2010-05-23 18:23:22

1

此功能僅在該範圍內定義。所以你不能在上述範圍之外訪問它。有圍繞它的技巧,但沒有任何我會建議。

+1

不正確。一旦定義,innerOne就是一個全局函數。 – Artefacto 2010-05-23 18:16:55

2

innerOne實際上是一個全局函數。

您在一個方法中定義它的事實並不重要,它在全局函數表中。參見:

class myClass { 

    static function one(){ 

     function innerOne() { 
      // Some code 
      echo "buga!"; 
     } 


    } 
} 

myClass::one(); 

innerOne(); 

給出「buga!」。您必須先調用one(),以便定義函數。

你想要的是這樣的:

class myClass { 

    function one($var1, $var2){ 
     return $this->innerOne($var1, $var2); 
    } 

    private function innerOne($var1, $var2) { 
     return $this->two($var1, $var2); 
    } 

    function two($var1, $var2) { 
    // Does magic with passed variables 
     return $var1 . $var2; 
    } 


} 

$var = new myClass(); 
echo $var->one("bu","ga");