Php 如何覆盖静态变量?
我有一个带有静态和非静态变量的类应用程序Php 如何覆盖静态变量?,php,static,Php,Static,我有一个带有静态和非静态变量的类应用程序 class App{ protected static $appName = 'dummy'; protected $appIcon = 'icon'; public static function getAppName() { return self::$appName; } } 然后我像这样扩展这个类 class Notepad extends App{ private static $ap
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(),但它总是返回dummy
有什么想法或建议吗
提前谢谢
J
在谢尔盖的职位之后:
我在想,哪种OOP方式最适合做这样的事情,哪种方式最有效(速度/内存)
函数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;
}
}
我想我找到了更好的解决办法
class App{
protected static $appName = 'dummy';
protected $appIcon = 'icon';
public static function getAppName() {
$c = get_called_class();
return $c::$appName;
}
}
现在它的工作方式应该是 实际上,在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”;
更多信息。感谢您的快速回答。如果不重新声明getAppName()?a,就没有办法了。将变量声明为puplic是最有效的方法,如果您想更改它,请使用statis variable;如果不想更改,请使用const作为代码。
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';
}