1

我希望这不是一个愚蠢的问题,但我真的找不到答案。

我有一些带有单例函数的全局类。主要是关于小的配置参数。

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() 处理它

这也太脏了吧?

4

1 回答 1

0

不要使用静态变量,只需将 $strQuote 设为常量变量即可。然后您可以在与静态变量相同的庄园中访问它。const STR_QUOTE = "'";然后您可以在类中以类名的身份访问它,也可以在self::STR_QUOTE外部使用类名访问它。

于 2015-03-22T13:11:55.427 回答