0

我有一个带有静态和非静态变量的类 App。

class App{
    protected static $appName = 'dummy';
    protected $appIcon = 'icon';

    public static function getAppName() {
        return self::$appName;
    }
}

然后我像这样扩展这个类

class Notepad extends App{
    private static $appName = 'notepad';
    private $appIcon = 'notepad_icon';
}

我想在不创建记事本实例的情况下获取 appName。我试过 Notepad::getAppName() 但这总是返回虚拟的。

有什么想法或建议???

提前致谢!

Ĵ!

在谢尔盖的帖子之后:

我在徘徊,哪种方式是最 OOP 的方式来做这样的事情,并且最有效(速度/内存)?

a. declaring variables as puplic

b. creating an instance of an object just to get a few variables

c. rewrite the static function to all the children classes as Sergey suggested
4

3 回答 3

1

我想我找到了更好的解决方案

class App{
    protected static $appName = 'dummy';
    protected $appIcon = 'icon';

    public static function getAppName() {
        $c = get_called_class();
        return $c::$appName;
    }
}

现在它按应有的方式工作!!!

于 2012-05-14T21:14:32.847 回答
0

函数 getAppName() 调用 App 类,并且 self::$appName 指向 App::$appName 如果你想要覆盖的值,你必须这样写:

class Notepad extends App{
    protected static $appName = 'notepad';
    protected $appIcon = 'notepad_icon';
    public static function getAppName() {
        return self::$appName;
    }
}
于 2012-05-14T11:47:14.390 回答
0

实际上,您在 php > 5.3 中有一个新关键字“static”。

我改变了你的例子:

class App{
    protected static $appName = 'dummy';
    protected $appIcon = 'icon';

    public static function getAppName() {
        return static::$appName;
    }
}

class Notepad extends App{
    protected static $appName = 'notepad';
    protected $appIcon = 'notepad_icon';
}

这样 Notepad::getAppName() 将返回 'notepad'; 更多信息在这里

于 2012-05-14T21:36:37.167 回答