基本上,我想知道的是,对于create_function函数中的第二个参数,有无论如何传递一个没有分号的字符串?或者它不起作用。PHP的create_function,函数没有分号?
例如:
taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),
通知有字符串中分号。是否有任何可能的方式有人可以输入一个没有分号仍然会运行/评估的函数?
基本上,我想知道的是,对于create_function函数中的第二个参数,有无论如何传递一个没有分号的字符串?或者它不起作用。PHP的create_function,函数没有分号?
例如:
taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),
通知有字符串中分号。是否有任何可能的方式有人可以输入一个没有分号仍然会运行/评估的函数?
不,这是不可能的。 PHP是分号敏感的,你必须使用它来终止右括号前的每个语句。我甚至尝试过这样的常规功能:
function f() {
return 1
}
它发现了一个语法错误,与JavaScript不同。
在使用之前,您应该始终清理任何用户输入。 我建议你在用户输入中寻找分号,如果缺失,追加它。
如果用户可以在这里输入任何内容,如果他输入无效的函数名称或只是垃圾,则仍然有问题。
您可以使用preg_match()进行验证(虽然我不是preg的专家,所以我会让其他人帮助您)。
首先,你为什么需要这个?这是创建函数的一种非常肮脏的方式。希望是因为你想创建一个界面,人们可以直接创建一个函数(这只会对你有用,否则将会是一个很大的安全问题)。我真的不知道你想如何使用它。
无论如何,对于你的问题,你不必在乎它的工作与否。我的意思是,只要测试它是否正常工作,如果不是简单地放一个分号。这只是对字符串的简单测试。
使用create_function()创建匿名函数。第二个参数是一个字符串,它是函数的代码(就像你写的任何其他函数一样)。例如:它不一定以分号结尾,例如:
$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }');
echo $coolfunction(1) . ' and ' . $coolfunction(-1);
结束于'}'并打印出来:是且不是!
为什么你需要那个? – 2011-01-14 04:41:24
呃试试看。 – dqhendricks 2011-01-14 04:43:13
你的意思是`crc32($ b)`? – 2011-01-14 04:50:41