PHP 将 create_function 更改为匿名函数
PHP change create_function to anonymous function
我继承了一些旧代码,需要将 create_function 转换为匿名函数。我已经这样做了,但是因为我看不到匿名函数中的代码,所以我不知道它是否等于前一个 create_function.
中的代码
这是代码,我的问题是:'my translation' 等于 'original code' 吗?
public static function makePhpVdtorFromRegex($regex, $match = TRUE)
{
//original code
$s = 'return '.($match?'':'0 == ').'preg_match(\'/'.addslashes($regex).'/\',$v);';
return create_function('$v', $s);
// my translation
return function($v) use ($regex, $match) {
return ($match?'':'0 == ').preg_match('/'.addslashes($regex).'/',$v);
};
}
我相信 makePhpVdtorFromRegex 代表 'Make PHP Validator From Regex'。验证这个的问题是我不确定实际验证器在哪里使用,因为这个匿名函数存储在一个数组中,该数组用于在稍后进行表单输入验证时验证输入。
因为 $regex 和 $match 仅存在于 makePhpVdtorFromRegex() 中,所以当验证器最终 运行 时它们将不可用,对吧?所以我怀疑我的翻译不起作用?
要模仿原始行为,您应该可以将其替换为(出于测试目的,我将方法转换为函数):
function makePhpVdtorFromRegex($regex, $match = true) {
if ($match) {
return function($value) use ($regex) {
return preg_match('/'.addslashes($regex).'/', $value);
};
}
return function($value) use ($regex) {
// Same as '0 == preg_match(...)' from original code
return !preg_match('/'.addslashes($regex).'/', $value);
};
}
$validator = makePhpVdtorFromRegex('^[a-z]+$');
// Check if something matches
var_dump($validator('abc')); // true
// Check if something doesn't match
$validator = makePhpVdtorFromRegex('^[a-z]+$', false);
var_dump($validator('123')); // true
如果您以后有机会研究实际的表单验证,甚至可能自己控制正则表达式,您可以将此代码重写为更简单的代码,例如:
function getRegexValidator() {
return function($regex, $value) {
return preg_match($regex, $value);
};
}
$validator = getRegexValidator();
// Check if something matches
var_dump($validator('/^[a-z]+$/', 'abc')); // true
// Check if something doesn't match
var_dump(!$validator('/^[a-z]+$/', '123')); // true
我继承了一些旧代码,需要将 create_function 转换为匿名函数。我已经这样做了,但是因为我看不到匿名函数中的代码,所以我不知道它是否等于前一个 create_function.
中的代码这是代码,我的问题是:'my translation' 等于 'original code' 吗?
public static function makePhpVdtorFromRegex($regex, $match = TRUE)
{
//original code
$s = 'return '.($match?'':'0 == ').'preg_match(\'/'.addslashes($regex).'/\',$v);';
return create_function('$v', $s);
// my translation
return function($v) use ($regex, $match) {
return ($match?'':'0 == ').preg_match('/'.addslashes($regex).'/',$v);
};
}
我相信 makePhpVdtorFromRegex 代表 'Make PHP Validator From Regex'。验证这个的问题是我不确定实际验证器在哪里使用,因为这个匿名函数存储在一个数组中,该数组用于在稍后进行表单输入验证时验证输入。
因为 $regex 和 $match 仅存在于 makePhpVdtorFromRegex() 中,所以当验证器最终 运行 时它们将不可用,对吧?所以我怀疑我的翻译不起作用?
要模仿原始行为,您应该可以将其替换为(出于测试目的,我将方法转换为函数):
function makePhpVdtorFromRegex($regex, $match = true) {
if ($match) {
return function($value) use ($regex) {
return preg_match('/'.addslashes($regex).'/', $value);
};
}
return function($value) use ($regex) {
// Same as '0 == preg_match(...)' from original code
return !preg_match('/'.addslashes($regex).'/', $value);
};
}
$validator = makePhpVdtorFromRegex('^[a-z]+$');
// Check if something matches
var_dump($validator('abc')); // true
// Check if something doesn't match
$validator = makePhpVdtorFromRegex('^[a-z]+$', false);
var_dump($validator('123')); // true
如果您以后有机会研究实际的表单验证,甚至可能自己控制正则表达式,您可以将此代码重写为更简单的代码,例如:
function getRegexValidator() {
return function($regex, $value) {
return preg_match($regex, $value);
};
}
$validator = getRegexValidator();
// Check if something matches
var_dump($validator('/^[a-z]+$/', 'abc')); // true
// Check if something doesn't match
var_dump(!$validator('/^[a-z]+$/', '123')); // true