让我们说我们有功能:
function foo() {
return "bar";
}
是否可以向foo()
函数添加一些过滤器,例如使其返回双值"barbar"
而不更改函数本身。
所以我们会:
foo(); //returns "bar"
function filter($&val) {
$val = $val . $val;
}
add_filter_to_function('foo','filter');
foo(); //returns "barbar"
然后在任何地方使用foo(),它会返回过滤后的值,而不会更改将foo()
调用为foo() . foo()
之类的代码,而不会更改函数本身
答案 0 :(得分:2)
在PHP中,有一个RunKit扩展名(runkit_function_redefine()特别针对您的问题),它允许您动态操作代码的对象(如函数或类)。
但是如果您需要以这种方式更改功能代码,我认为您做错了 - 所以您可能应该重新考虑目标并使用其他工具解决原始问题。
如果在某些特殊情况下需要使用某些参数调用函数,可以使用以下内容:
function foo($x, $y)
{
//do stuff
}
function bar($x, $y, $z)
{
//do stuff with $z?
foo($x, $y);
}
并使用bar()
代替foo()
然后 - 在某些地方(您需要调整)
答案 1 :(得分:0)
您可以简单地连接自身的值:
$val = foo();
$val .= $val;
或者如果你的函数确实需要返回一个double值,那么你应该考虑重构你的foo()
函数,因为它似乎没有你想做的。
要么是这样,要么接受其他一个答案,告诉你将foo()
包裹在另一个函数周围。
答案 2 :(得分:0)
如果函数的返回值是静态的,则无法在内部更改它。
如果您有foo($var)
,您可以更改$ var的状态,并且每次调用foo($ var)时,您都会收到新值,但在您的情况下几乎不可能。
每次需要双倍值时,你必须调用另一个函数:
function foo() {
return 'bar';
}
function filter($func) {
return $func.$func;
}
echo filter(foo());
答案 3 :(得分:0)
将您的函数转换为对象方法,然后add_filter_to_function将过滤器添加到对象中。
然后,当您调用该函数时,它将能够使用已分配给该函数所属对象的过滤器。