0

基本上,我想知道的是,对于 create_function 函数中的第二个参数,是否有传递不带分号的字符串?或者它不会工作。

例子:

taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),

注意字符串中有一个分号。有没有可能有人可以在没有分号的情况下输入仍会运行/评估的函数?

4

4 回答 4

2

使用 create_function() 您正在创建一个匿名函数。第二个参数是一个字符串,它是函数的代码(就像您编写的任何其他函数一样)。它不必以分号结尾,例如:

$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }');

echo $coolfunction(1) . ' and ' . $coolfunction(-1);

以 '}' 结尾并打印出:是和否!

于 2011-01-14T04:52:42.290 回答
1

不,这是不可能的。PHP 对分号敏感,您必须使用它来终止右大括号之前的每个语句。我什至尝试过这样的常规功能:

function f() {
  return 1
}

它吐出一个语法错误,这与 JavaScript 不同。

于 2011-01-14T04:50:11.793 回答
0

在使用之前,您应该始终清理任何用户输入。我建议您在用户输入中查找分号,如果缺少,请附加它。

如果用户可以在这里输入任何内容,如果他输入了无效的函数名或只是垃圾,您仍然会遇到问题。

您可以使用preg_match()进行验证(尽管我不是 preg 方面的专家,所以我会让其他人帮助您)。

于 2011-01-14T04:50:34.247 回答
-3

首先,你为什么需要那个?这是创建函数的一种非常肮脏的方式。希望是因为您想创建一个人们可以直接创建功能的界面(这仅适用于您,否则将是一个很大的安全问题)。我真的不明白你想如何使用它。

无论如何,对于您的问题,您不必关心它是否有效。我的意思是,只需测试它是否有效,如果不是自己放一个分号。这只是对字符串的简单测试。

于 2011-01-14T04:52:12.097 回答