2012-11-28 75 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'; 
    } 
} 
相关问题