Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP是否可以像p($i)那样打印“文件”$我是5“C和Ruby可以。。。(即自动打印出“$i”)_Php_C_Ruby_Debugging_Printing - Fatal编程技术网

PHP是否可以像p($i)那样打印“文件”$我是5“C和Ruby可以。。。(即自动打印出“$i”)

PHP是否可以像p($i)那样打印“文件”$我是5“C和Ruby可以。。。(即自动打印出“$i”),php,c,ruby,debugging,printing,Php,C,Ruby,Debugging,Printing,我想知道PHP是否可以做到这一点,因为似乎还没有很好的解决方案: p($i) 它会打印出来 $i is 5 及 将打印 1 + 2 is 3 及 C和Ruby都能做到。。。在C中,它可以通过字符串化来完成,而在Ruby中,有一种解决方案使用p{'i'}或p{'1+2'}(通过传递带有绑定的块来进行评估)。。。我想知道在PHP中,这也可能吗?好吧,如果你传入一个字符串,你可以用它来做计算。好吧,如果你传入一个字符串,你可以用它来做计算。我认为可以通过回溯,然后加载调用p()的文件并对其进行标

我想知道PHP是否可以做到这一点,因为似乎还没有很好的解决方案:

p($i)
它会打印出来

$i is 5

将打印

1 + 2 is 3


C和Ruby都能做到。。。在C中,它可以通过字符串化来完成,而在Ruby中,有一种解决方案使用
p{'i'}
p{'1+2'}
(通过传递带有绑定的块来进行评估)。。。我想知道在PHP中,这也可能吗?

好吧,如果你传入一个字符串,你可以用它来做计算。

好吧,如果你传入一个字符串,你可以用它来做计算。

我认为可以通过回溯,然后加载调用
p()
的文件并对其进行标记来完成。但我不认为这是一个“好”的解决方案

当然你可以自己把它串起来

p('$i');

function p($str) 
{
    echo $str, " = ", eval("return ($str);");
}

我认为可以通过回溯,然后加载并标记调用
p()
的文件来完成。但我不认为这是一个“好”的解决方案

当然你可以自己把它串起来

p('$i');

function p($str) 
{
    echo $str, " = ", eval("return ($str);");
}

如果将字符串弄乱,使其成为返回语句,则可以使用

适用于简单表达式,但如果您尝试引用$expr中的变量,那么它将无法在函数p()的范围内找到该变量-下面的一些技巧可能会有所帮助:

function p($expr)
{
   $php="return {$expr};";
   $php=preg_replace('/\\$(\w+)/', '$GLOBALS[\'$1\']', $php);


   echo "$expr is ".eval($php)."\n";
}

$x=5;
p('$x+4');
在这里,我们在代码中搜索变量引用,并将它们转换为$GLOBALS数组引用。表达式
$x+4
变成
return$GLOBALS['x']+4


但我不确定我是否希望在生产代码中看到这一点:)

如果将字符串弄乱,使其成为返回语句,则可以使用

适用于简单表达式,但如果您尝试引用$expr中的变量,那么它将无法在函数p()的范围内找到该变量-下面的一些技巧可能会有所帮助:

function p($expr)
{
   $php="return {$expr};";
   $php=preg_replace('/\\$(\w+)/', '$GLOBALS[\'$1\']', $php);


   echo "$expr is ".eval($php)."\n";
}

$x=5;
p('$x+4');
在这里,我们在代码中搜索变量引用,并将它们转换为$GLOBALS数组引用。表达式
$x+4
变成
return$GLOBALS['x']+4

但我不确定我是否希望在生产代码中看到这一点:)

简短回答:否

基于eval()的解决方案的问题在于范围。以下操作不起作用:

function p($expr)
{
   $php="return {$expr};";
   echo "$expr is ".eval($php)."\n";
}

$i = 10;

p('$i + 1');
因为调用eval()时,$i不在范围内。

简短回答:否

基于eval()的解决方案的问题在于范围。以下操作不起作用:

function p($expr)
{
   $php="return {$expr};";
   echo "$expr is ".eval($php)."\n";
}

$i = 10;

p('$i + 1');

因为$i在调用eval()时不在作用域中。

使用
var\u export
会很好。我自己把它加密。。。这太有趣了,使用
var\u export
会很好。。。这太有趣了,函数无法计算全局思想函数无法计算全局思想另一个“Ruby比PHP更好”问题:)@毫无疑问,是的;)另一个“Ruby比PHP更好”的问题是:)@毫无疑问,是的;)