2014-10-01 267 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