你好,我使用laravel 4.我想知道如何調用函數,如:呼叫功能
$model->trans('name'), $model->trans('title')
爲
$model->transName(), $model->transTitle()
所以這意味着我想用參數name,or title
調用函數反轉,但函數名稱和參數已附加。
這就像我們做這樣的事情時的雄辯:whereEmail(), whereId()
。
我希望這是有道理的。
謝謝
你好,我使用laravel 4.我想知道如何調用函數,如:呼叫功能
$model->trans('name'), $model->trans('title')
爲
$model->transName(), $model->transTitle()
所以這意味着我想用參數name,or title
調用函數反轉,但函數名稱和參數已附加。
這就像我們做這樣的事情時的雄辯:whereEmail(), whereId()
。
我希望這是有道理的。
謝謝
好吧,如果你確定你需要它,下面是使用魔術方法工作的例子
<?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')
的方式更好。
評論:我得到了一些方法調用問題,如:'當在模型中使用__call時,調用非語言對象的成員函數inLanguage(),你有什麼想法嗎? – 2014-10-01 11:42:01
我修改了這個例子,現在就試試吧。 – Danny 2014-10-01 11:45:03
我修改了代碼,現在它工作:)。萬分感謝 – 2014-10-01 11:57:50
那麼,它沒有任何意義,但它不是一個問題,只要你可以像在字符串中調用函數一樣。函數trans($ field){$ function ='trans'。 $場; $()函數; }' – Danny 2014-10-01 10:25:14
如果你不想創建'trans函數' - 查看__call魔術方法 - http://php.net/manual/en/language.oop5.overloading.php#object.call – Danny 2014-10-01 10:25:56
但實際上它只是意味着糟糕的應用程序設計 – Danny 2014-10-01 10:27:36