2012-10-30 51 views
0

內從一個抽象的方法,如果您有類似以下內容:PHP調用一個抽象方法

abstract class User { 

    function checkThis() {   

     return true;  
    } 

    function mainFunction() { 

    } 
} 

,並要撥打checkThis()mainFunction()內,你會做這樣的?

abstract class User { 

    function checkThis() { 

     return true;  
    } 

    function mainFunction() { 

     if ($this->checkThis()) 
      echo "Works"; 
    } 

我似乎有問題,如果我把這個從另一個類中,說:

class SecondClass { 

    function test() { 
     User::mainFunction(); 
    }  
} 

提供此錯誤:

Fatal error: Call to undefined method SecondClass::checkThis() 
+2

你有什麼問題?是否有錯誤訊息? – wgcrouch

+2

你想從同一個類的靜態上下文中調用一個函數。如果你使用self :: checkThis()而不是'$ this-> checkThis()' –

+0

,那麼這個方法就可以工作。另一個問題是,你似乎沒有關閉類的用戶,它錯過了一個'}' –

回答

1

你也許應該考慮有一個類你可以實例化這個抽象類的擴展。例如

class userConcrete extends User { 

} 

然後在第二類,你可以注入用戶對象,像這樣:

class SecondClass{ 

    protected $user; 

    public function __construct(userConcrete $user) 
    { 
     $this->user = $user; 
    } 
    function test(){ 
     $this->user->mainFunction(); 
    } 

} 

也使mainFunction公衆的抽象類。