我想知道我是否可以分配一个功能。
我有一个函数调用mpurl($s, $pagevar, $pages)
,这个函数调用在我的代码中多次出现。现在我想为这个功能添加更多案例。像:
if(strpos($s, 'sign') !== false) {
mpurl($s, $pagevar, $pages);
} else {
my_mpurl($s, $pagevar, $pages);
}
我不想在每个函数mpurl的调用中使用这个if-else,所以我想全局改变函数mpurl的含义。
所以问题来了,我可以这样写:
if(strpos($s, 'sign') === false) {
mpurl = my_mpurl;
}
mpurl($s, $pagevar, $pages);
或者我该如何实现这个目的?感谢。
答案 0 :(得分:0)
您可以在功能中添加一个开关。可能看起来像:
function mpurl($a,$b,$c) {
switch ($a) {
case 'sign' :
// do some stuff
break;
default :
// do some other stuff
break;
}
// do some common stuff in the function
}
另一种可能性(基于您的评论)可能如下。在$a
等于' sign'的情况下,您将停止执行该函数的其余部分并立即返回结果。如果是其他情况,则继续执行函数的其余部分。
function mpurl($a,$b,$c) {
switch ($a) {
case 'sign' :
// do some stuff
return $result;
break;
default :
// do some other stuff
break;
}
// do some common stuff in the function
}
答案 1 :(得分:0)
更新
回顾下面的答案。如果两个函数采用相同的参数,则以相同的顺序,您可以简单地使用变量函数:
if (strpos($s, 'sign') === false) {
$func = 'my_mpurl';
} else {
$func = 'mpurl';
}
$func($s, $pagevar, $pages);
如果由于某种原因您无法升级并且无法使用旧版本,则可以使用call_user_func_array
:
if (strpos($s, 'sign') === false) {
$func = 'my_mpurl';
} else {
$func = 'mpurl';
}
call_user_func_array($func, array($s, $pagevar, $pages));
当然,您可以根据需要随时使用$func
var来随时调用该函数。
基本上,根据某个变量的值,您希望使用相同的参数调用不同的函数。这是call_user_func_array
的用途:
if (strpos($s, 'sign') === false) {
$func = 'my_mpurl';
} else {
$func = 'mpurl';
}
call_user_func_array($func, array($a, $b, $c));
同样的事情,但有点短(并使用短数组语法):
$func = 'mpurl';
if (strpos($s, 'sign') === false)
$func = 'my_'.$func;//prepend
call_user_func_array($func, [$s, $pagevar, $pages]);
//or even shorter
$func($s, $pagevar, $pages);
PHP 5.3中引入了作为函数名称(变量函数)语法的变量值。如果你还没有在5.3上运行,你真的应该升级,但同时你可以使用call_user_func_array
答案 2 :(得分:0)
你无法重新分配这样的功能。您可以做的最好的事情是将if-else封装在辅助函数中:
function mpurlx($s, $pagevar, $pages) {
if (strpos($s, 'sign') !== false) {
mpurl($s, $pagevar, $pages);
} else {
my_mpurl($s, $pagevar, $pages);
}
}
然后进行搜索&替换其他代码,以便在任何地方调用辅助函数。