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