2012-11-28 113 views
-3

基類:我不能用靜態方法,但是,這似乎是合理的

abstract class Challenge 
{ 
    abstract **static** public function getName(); 
} 
現在兩班從它

class ChallengeType1 extends Challenge 
{ 
    public **static** function getName() 
    { 
     return 'Swimming'; 
    } 
} 

class ChallengeType2 extends Challenge 
{ 
    public **static** function getName() 
    { 
     return 'Climbing'; 
    } 
} 

大家都可能知道,我們可以」 t使用static,但這是合理的。所以我不能這樣做:例如,我有類名,所以我想知道它的名字:ChallengeType2::getName(); - 它會失敗!首先,我應該構造這個對象 - 看起來沒有必要(更不用說,這個類有什麼非常複雜的初始化?)

+0

有什麼問題嗎? –

+0

你發佈的代碼在我站立的地方工作正常。那麼,一旦星號被刪除。 – femtoRgon

+0

請不要用'** static **'來裝飾你的代碼。您發佈的代碼應該是*有效*代碼。 – meagar

回答

1

原來你不能在abstract class上有static abstract方法。在這裏看到:

Why does PHP 5.2+ disallow abstract static class methods?

但是你可以聲明interface需要一個static方法。

下面是編譯一個例子:

工作實例

<?php 
interface IChallenge 
{ 
    static function getName(); 
} 

abstract class Challenge implements IChallenge 
{ 

} 

class ChallengeType1 extends Challenge 
{ 
    public static function getName() 
    { 
     return 'Swimming'; 
    } 
} 

class ChallengeType2 extends Challenge 
{ 
    public static function getName() 
    { 
     return 'Climbing'; 
    } 
} 
相關問題