你好,我使用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