【问题标题】:I can't use a static method, but that seems to be reasonable我不能使用静态方法,但这似乎是合理的
【发布时间】:2012-11-28 22:16:07
【问题描述】:

基类:

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

【问题讨论】:

  • 您发布的代码在我所站的位置上运行良好。好吧,一旦星号被删除。
  • 请不要用**static**之类的东西装饰你的代码。您发布的代码应该是有效代码。
  • 是什么让你觉得这行不通?你遇到了什么错误?向我们提供足够的信息来帮助您,您将获得更好的结果和更少的反对票。
  • 哦,如果我加了static关键字,php 5.4会说:Static function Challenge::getName() should not be abstract in
  • 您的代码看起来不错 - 您是从命令行运行它还是通过开发工具(即 Eclipse 等)运行它?你确定你使用的是 5.4 吗?

标签: php object inheritance static


【解决方案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';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多