我有一个包含静态和非静态变量的类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(),但这总是返回虚拟。
任何想法或建议???
提前致谢!
J 1
在谢尔盖的帖子之后:
我在徘徊,这是最像这样做的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
答案 0 :(得分:1)
我认为我找到了更好的解决方案
class App{
protected static $appName = 'dummy';
protected $appIcon = 'icon';
public static function getAppName() {
$c = get_called_class();
return $c::$appName;
}
}
现在它按照它应该的方式工作!!!
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
实际上你在php>中有一个新关键字“static” 5.3。
我改变了你的榜样:
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'; 更多信息here。