2013-05-07 75 views
2

我尝试调用Test3函数,但返回了这个错误:“致命错误:调用未定义的函数”。私有函数中的PHP调用函数类方法

下面是一个例子:

class Test { 
    public Test1(){ 
     return $this->Test2(); 
    } 

    private Test2(){ 
     $a = 0; 
     return Test3($a); 

     function Test3($b){ 
      $b++; 
      return $b; 
     } 
    } 
} 

如何调用Test3的功能?

+4

为什么你是这样的嵌套功能摆在首位?使Test3成为你的类中的一个单独的方法,然后你可以将它称为$ this-> Test3(),并且你不会遇到像这样的问题 – 2013-05-07 14:47:31

+0

嵌套的php函数没有用处,它们可以被当作一个侧面解析器的效果。 – 2013-05-07 14:51:29

+3

'public Test1(){'这是什么语言? – Ejaz 2013-05-07 14:52:14

回答

6

From PHP DOC

All functions and classes in PHP have the global scope - they can be called outside a function even if they were defined inside and vice versa.

使用闭

$test = new Test(); 
echo $test->Test1(); 

修改

class Test { 

    public function Test1() { 
     return $this->Test2(); 
    } 

    private function Test2() { 
     $a = 0; 

     $Test3 = function ($b) { 
      $b ++; 
      return $b; 
     }; 

     return $Test3($a); 
    } 
} 
+0

这太棒了。谢谢。 – 2013-05-07 14:59:53

+0

很好解释:) – 2013-05-07 15:16:01

0

不知道,如果你想要一个closure或者如果你的 '内在' 功能是一个错字。

如果它被认为是一个单独的方法,那么下面是正确的语法:

class Test 
{ 

    public function Test1() 
    { 
    return $this->Test2(); 
    } 

    private function Test2() 
    { 
    $a = 0; 
    return $this->Test3($a) 
    } 

    public function Test3($b) 
    { 
    $b++ 
    return $b; 
    } 

}