【发布时间】:2015-05-25 12:29:20
【问题描述】:
我希望这不是一个愚蠢的问题,但我真的找不到答案。
我有一些带有单例函数的全局类。 主要是关于小的配置参数。
class myConfig{
protected $strQuote = '"';
protected $path_delimiter = '\\';
public function __get($name){
return $this->$name; // after checking if it exist etc.
}
public static function getMe(){
// do the singleton magic
return $oInstance;
}
}
这很好用:
$quote = myConfig::getMe()->strQuote;
这也是:
$oConf = myConfig::getMe();
$quote = $oConf->strQuote;
$delim = $oConf->path_delimiter;
但大多数情况下只需要 1 个小参数,我想将其表述为:
$quote = myConfig::$strQuote;
因为一切都是神奇的方法,但我找不到任何方法来解决这个问题。 我尝试过静态 __get() 和 __callstatic()。但无法让它工作。
将属性声明为静态不是一种选择。因为该类将主要用作实例。
更新解决方法
我刚刚想到了一个肮脏的解决方法。我不确定它是否太脏了。
$quote = myConfig::strQuote();
或
$quote = myConfig::get_strQuote();
然后用 __callStatic() 处理
这太脏了吗?
【问题讨论】:
-
不,如果有......那将是非常不合逻辑的......静态引用永远无法知道类的具体实例或实例
-
这个问题不应该被否决,只要努力理解/解决问题,就没有错误的问题。
-
但是……为什么会有 __callStatic() 而不是 __getStatic()...?我不明白为什么我们可以使用各种魔术方法,但不是为了这个。我错过了什么?
-
@MarkBaker 这是真的。但因此我对此类课程使用单例。所以它只有一个实例,并且是全局使用的
-
看来我不是第一个提出这个要求的人 :( stackoverflow.com/questions/1279382/… 功能请求来自 2009 年......
标签: php oop static getter-setter magic-function