2014-10-01 262 views
0

你好,我使用laravel 4.我想知道如何調用函數,如:呼叫功能

$model->trans('name'), $model->trans('title')

$model->transName(), $model->transTitle()

所以這意味着我想用參數name,or title調用函數反轉,但函數名稱和參數已附加。

這就像我們做這樣的事情時的雄辯:whereEmail(), whereId()

我希望這是有道理的。

謝謝

+2

那麼,它沒有任何意義,但它不是一個問題,只要你可以像在字符串中調用函數一樣。函數trans($ field){$ function ='trans'。 $場; $()函數; }' – Danny 2014-10-01 10:25:14

+1

如果你不想創建'trans函數' - 查看__call魔術方法 - http://php.net/manual/en/language.oop5.overloading.php#object.call – Danny 2014-10-01 10:25:56

+1

但實際上它只是意味着糟糕的應用程序設計 – Danny 2014-10-01 10:27:36

回答

0

好吧,如果你確定你需要它,下面是使用魔術方法工作的例子

<?php 

class Model 
{ 
    public function __call($func, $args) 
    {   
     if(strstr($func, 'trans')) 
     { 
      return $this->trans(strtolower(str_replace('trans', '', $func))); 
     } 

     return parent::__call($func, $args); 
    } 

    public function trans($field) 
    { 
     return $field; 
    } 
} 

$m = new Model(); 

$m->transSomething(); 

當未定義的方法將被調用,它將如果方法名與'開始檢查反式「,如果是的話,將它傳遞給$this->trans(),但不要在開始時使用」反式「。

但在我看來,與$model->trans('somefield')的方式更好。

+0

評論:我得到了一些方法調用問題,如:'當在模型中使用__call時,調用非語言對象的成員函數inLanguage(),你有什麼想法嗎? – 2014-10-01 11:42:01

+0

我修改了這個例子,現在就試試吧。 – Danny 2014-10-01 11:45:03

+0

我修改了代碼,現在它工作:)。萬分感謝 – 2014-10-01 11:57:50