我不能使用静态方法,但这似乎是合理的

时间:2012-11-28 22:16:07

标签: php object inheritance static

基类:

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';
    }
}

正如大家可能知道的那样,我们不能使用static,但这是合理的。所以我不能这样做:例如,我有类名,所以我想知道它的名字:ChallengeType2::getName(); - 它会失败!首先,我应该构造对象 - 看起来没必要(更不用说,这个类有什么非常复杂的初始化?)

1 个答案:

答案 0 :(得分:1)

事实证明,static abstract上无法使用abstract class方法。见这里:

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';
    }
}