2011-01-14 12 views
0

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

例如:

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

通知有字符串中分号。是否有任何可能的方式有人可以输入一个没有分号仍然会运行/评估的函数?

+0

为什么你需要那个? – 2011-01-14 04:41:24

+2

呃试试看。 – dqhendricks 2011-01-14 04:43:13

+0

你的意思是`crc32($ b)`? – 2011-01-14 04:50:41

回答

1

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

function f() { 
    return 1 
} 

它发现了一个语法错误,与JavaScript不同。

0

在使用之前,您应该始终清理任何用户输入。 我建议你在用户输入中寻找分号,如果缺失,追加它。

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

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

-3

首先,你为什么需要这个?这是创建函数的一种非常肮脏的方式。希望是因为你想创建一个界面,人们可以直接创建一个函数(这只会对你有用,否则将会是一个很大的安全问题)。我真的不知道你想如何使用它。

无论如何,对于你的问题,你不必在乎它的工作与否。我的意思是,只要测试它是否正常工作,如果不是简单地放一个分号。这只是对字符串的简单测试。

2

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

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

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

结束于'}'并打印出来:是且不是!