PHP 在允许您通过使用 func_* 函数向函数发送可变长度的参数列表方面非常出色。但是,不幸的是(这在 PHP 错误报告/功能请求中多次被提出),它不支持按引用传递参数,这将极大地简化同时处理多个变量的过程,只需执行:somefunction($a, $b, $c) 并对其进行处理,而无需进行任何其他赋值。
但是,我发现了一种利用 PHP 的几个功能的方法,并创建了一个非常好的示例,展示了如何一举处理多个变量!
用法是(使用我的示例函数/类)
"list($a, $b, $c, $d, $e) = TextEscape::escape_multi($a, $b, $c, $d, $e);"
如果 PHP 实际上能够在使用可变长度参数列表时按引用传递变量,则可以将其简化为
"TextEscape::escape_multi($a, $b, $c, $d, $e);"
它非常接近,在简单性和速度方面。只需确保在该语句的两侧始终具有相同数量和顺序的参数。
使用静态类只是为了使代码更简洁易读。这可以应用于任何函数!
现在,进入代码,享受纯粹的才华,并享受在一个语句中修改多个变量的乐趣!;-)
<?php
class TextEscape
{
public static function escape_string($sString)
{
return htmlspecialchars($sString);
}
public static function escape_multi()
{
$aVariables = func_get_args();
foreach ($aVariables as $iKey => $sValue)
{
$aVariables[$iKey] = TextEscape::escape_string($sValue);
}
return $aVariables;
}
}
$a = "A<bar";
$b = "B>bar";
$c = "C<bar";
$d = "D>bar";
$e = "E<bar";
print_r(array($a, $b, $c, $d, $e));
list($a, $b, $c, $d, $e) = TextEscape::escape_multi($a, $b, $c, $d, $e);
print_r(array($a, $b, $c, $d, $e));
?>
这是代码的简洁版本,它准确地说明了正在发生的事情。
我还制作了该函数的速度狂版本,但不想将其发布为主要示例,因为它更难阅读。
但它更快,快得多!它在可能的情况下按引用传递并以更有效的方式循环。
只需将上述函数替换为此函数,结果相同,但速度更快
<?php
class TextEscape
{
public static function escape_string(&$sString) {
$sString = htmlspecialchars($sString);
}
public static function escape_multi()
{
$aVariables = func_get_args();
for ($i=(count($aVariables)-1); $i>=0; $i--) {
TextEscape::escape_string($aVariables[$i]); }
return $aVariables;
}
}
?>
享受!