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;
}
}
?>
盡情使用!