PHP create_function,函数没有分号?

时间:2011-01-14 04:38:41

标签: php function create-function

基本上,我想知道的是,对于create_function函数中的第二个参数,无论如何都要传递一个没有分号的字符串?或者它不起作用。

示例:

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

注意字符串中有分号。有没有可能的方法有人可以输入一个没有分号仍然可以运行/评估的函数?

4 个答案:

答案 0 :(得分:2)

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

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

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

结束'}'并打印出来:是和否!

答案 1 :(得分:1)

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

function f() {
  return 1
}

并且与JavaScript不同,它会出现语法错误。

答案 2 :(得分:0)

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

如果用户可以在这里输入任何内容,如果他输入无效的功能名称或只是垃圾,你仍会遇到问题。

您可以使用preg_match()进行验证(虽然我不是preg的专家,但我会让其他人帮助您)。

答案 3 :(得分:-3)

首先,你为什么需要那个?这是一种创建函数的非常脏的方法。希望因为你想创建一个人们可以直接创建一个函数的界面(这只适合你或者它将是一个很大的安全问题)。我真的不知道你想怎么用它。

无论如何,对于你的问题,你不必关心它是否正常工作。我的意思是,只要测试它是否正常工作,如果不是自己用分号。这只是对字符串的简单测试。