2013-09-28 22 views
0

在我的應用程序中,我有一個Config對象,我的服務層和視圖具有類屬性。任何時候,我想有一個配置值我要做特性的有效用法

$configValue = $this->config->setting('setting.name'); 

我希望能夠我想設置每一次做的是

$configValue = $this->config('setting.name'); 

要做到這一點,現在我已經內把這個代碼我AbstractServiceAbstractView我有

protected function config($setting) { 
    return $this->config->setting($setting); 
} 

它只是重複代碼的一小點點,但我還是寧願不用它的話會是使用正確的選擇特質在這裏?

回答

3

也許你正在尋找的魔法__invoke功能(需要5.3+,但因爲你使用的特徵我假設你有這樣的):

<?php 
    class Config { 
     private $config = array(
      'ip' => '127.0.0.1', 
      'port' => 12345 
     ); 

     public function setting($option) { 
      if (!empty($this->config[$option])) { 
       return $this->config[$option]; 
      } 
      return false; 
     } 

     public function __invoke($option) { 
      return $this->setting($option); 
     } 
    } 

    $config = new Config(); 
    var_dump($config('ip')); //127.0.0.1 
?> 

DEMO

+0

我只是試圖在我的一個視圖和當我做'$ this-> config('setting.name')'我得到一個錯誤,因爲PHP在我的視圖中尋找一個叫做'config'的方法。我還沒有嘗試過,但做'$ config = $ this-> config; $ config('setting.name');'可能會工作,因爲它不會在我的視圖中查找'config'方法,但是這樣做會影響我編寫更少代碼以獲取配置值的全部目的。 – ibanore