Php 展开变量,但不要运行任何函数

Php 展开变量,但不要运行任何函数,php,Php,很难正确表述,因此我将展示一个我想要实现的示例: $x = 'one'; $y = 123123; $z = foo(bar($x, $y)); // $z = 'bar(one, 123123)' 基本上,我希望这个神奇的foo函数将每个变量扩展为它的值,但函数保持为字符串。最好的方法是什么?是否可以在不使用str_replace和类似工具提取变量的情况下执行此操作?我们如何将函数解释为字符串? 要求函数的调用应如上所述,而不是字符串: foo('bar($x,$y)')我想你不能这样做

很难正确表述,因此我将展示一个我想要实现的示例:

$x = 'one';
$y = 123123;

$z = foo(bar($x, $y));
// $z = 'bar(one, 123123)'
基本上,我希望这个神奇的foo函数将每个变量扩展为它的值,但函数保持为字符串。最好的方法是什么?是否可以在不使用str_replace和类似工具提取变量的情况下执行此操作?我们如何将函数解释为字符串? 要求函数的调用应如上所述,而不是字符串:

foo('bar($x,$y)')

我想你不能这样做

当foo()进场时,它将接收已处理的bar()结果。因此,它无法访问生成它们的环境(即函数栏()或其参数的名称)。如果您希望在泛型函数上使用这个foo(),那么我认为这是不可能的


您可以将参数('bar'、$x和$y)传递给foo,这将成为一个可变参数函数,并让这个新的foo()调用您的'bar'(第一个参数作为字符串传递,它将是函数的名称)。但是,您可能会受到性能方面的影响,而且您可能会在变量范围方面遇到问题……

如果您想要这样的功能,您必须实现完整的MVC模式,包括模型

因此,在控制器(甚至视图)中没有丑陋的原始mysql调用

你的代码会变成

$mc->output($obj->getdata());

其中,
$obj
是一个模型对象,
getdata()
是一个返回所需数据的方法,执行内部的所有抓取逻辑,从缓存或数据库中获取数据。

我不完全确定您想做什么,所以可能我离这里很远,但在我看来,您正在尝试使用回调。您可以用不同的方式实现它,但一种方法是使用匿名函数(PHP5.4支持)

然后,您的函数
foo
会像这样调用它:

function foo($callback) {
  call_user_func($callback);
}

是吗?

我想是的。。但是有没有一种方法可以向函数发送指针呢?像foo(&bar(…)?例如,获取/设置memcache:$mc->output(mysql_query($sql));将从memcache获取值(如果有),并在没有和输出时设置query@Vlakarados-只是为了澄清您的需求-您是否打算使用函数名和变量作为memcached值的键?i、 e.
'bar(one,123123)
是您用来存储和检索
bar(one,123123)
结果的键是的,例如,我知道这可能不是最好的方法,但它会给我唯一的键,而且是自动的,我有完整的MVC,那么我该如何使它工作呢?示例中的getdata()应该有参数,您可以将此函数与parametersWell一起使用,看起来您不知道我要实现什么,您只是用OOP方式编写它,但我需要的是一种获取“$obj->getdata()的方法“作为return中的字符串,这是一种解释,说明您的体系结构方法是错误的,您最好遵循更常见的模式,以避免像这样的麻烦。不完全确定匿名函数实际上是什么,需要对此进行一些阅读,但对于回调-不,我需要将函数作为字符串返回,但将参数变量作为值,而不是它们的名称。这是什么用例?在上面答案的注释中
function foo($callback) {
  call_user_func($callback);
}