过滤php函数返回值

时间:2013-09-11 12:06:57

标签: php function

让我们说我们有功能:

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()之类的代码,而不会更改函数本身

4 个答案:

答案 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将过滤器添加到对象中。

然后,当您调用该函数时,它将能够使用已分配给该函数所属对象的过滤器。