-4

基类:

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();- 它会失败!首先我应该构造对象 - 看起来没有必要(更不用说,这个类有什么非常复杂的初始化?)

4

1 回答 1

1

事实证明你不能static abstractabstract class. 看这里:

为什么 PHP 5.2+ 不允许抽象静态类方法?

但是你可以声明一个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';
    }
}
于 2012-11-29T01:29:23.230 回答