下面有更好的方法来完成这个简单的任务吗?像数组甚至其他方法一样?
<?PHP
// current way
if ($city != NULL) {
$city = FilterALLHTML($city);
}
if ($state != NULL) {
$state = FilterALLHTML($state);
}
if ($title != NULL) {
$title = FilterALLHTML($title);
}
if ($division != NULL) {
$division = FilterALLHTML($division);
}
?>
这是我当前的功能
function FilterALLHTML($document) {
//old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html
$text = strip_tags($document);
$search = array ("/f.?u.?c.?k/i",
"/(s|$).?h.?i.?t/i",
'/(potspace|mycrib|palbolt)/i');
$text = preg_replace ($search, '', $text);
return $text;
}
更新 - 在这篇帖子的建议之后感谢我的新功能谢谢你们
function FilterALLHTML($var) {
//old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html
if ($var != null){
$text = strip_tags($var);
$search = array ("/f.?u.?c.?k/i",
"/(s|$).?h.?i.?t/i",
'/(potspace|mycrib|palbolt|pot space)/i');
$text = preg_replace ($search, '', $text);
return $text;
}
return null;
}
答案 0 :(得分:15)
更改FilterALLHTML
功能以执行null
检查并让它返回null
?
然后你可以扔掉所有的if
。
示例:
function FilterALLHTML($input)
{
if ($input === null)
return null;
// Original code, I'll just use strip_tags() for a functional example
return strip_tags($input);
}
修改强>
我觉得要分享变量变量的替代方法,因为我不太喜欢使用字符串文字而不是变量名。一路参考:)
function FilterALLHTML(&$text)
{
if ($text !== null)
{
// Omitted regex bit for simplicity
$text = strip_tags($text);
}
}
$city = "<b>New York</b>";
$state = null;
$title = "<i>Mr.</i>";
$fields = array(&$city, &$state, &$title);
foreach ($fields as &$var)
FilterALLHTML($var);
(注意:FilterALLHTML
实现与第一个示例不同)
答案 1 :(得分:9)
是的,使用PHP的variable variables。
$vars = array('city','state','title','division');
foreach($vars as $v) {
if ($$v != null) $$v = FilterAllHTML($$v);
}
如果您知道所有变量先前已定义过,那么您不需要进行空检查。否则,空检查将阻止触发E_NOTICE错误。
答案 2 :(得分:5)
foreach (array('city', 'state', 'title', 'division') as $var) {
if ($$var != null) {
$$var = FilterALLHTML($$var);
}
}
与Thorarin一样,我建议您将FilterALLHTML
函数检查为null。
答案 3 :(得分:3)
嗯,你已经可以考虑编写一个函数,因为你做了四次完全相同的事情。
假设FilterALLHTML不是自定义函数。
function Filter($var)
{
if ($var != null)
{
return FilterALLHTML($var);
}
return null;
}
或者只是在FilterALLHTML函数中包含null检查,并在需要时从那里返回null。
所以,如果您可以更改FilterALLHTML,那么您可以这样做:
function FilterALLHTML($var)
{
if ($var == null)
{
return null;
}
else
{
//do your filtering
return $filteredVar;
}
}
答案 4 :(得分:3)
zombat的答案是最好的,但我补充说你不应该真正检查null
。如果由于某种原因FilterAllHTML
null
值存在问题,而不应该null
,则FilterAllHTML
函数定义中的$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
$$var = FilterAllHTML($$var);
}
检查。
{{1}}
答案 5 :(得分:1)
添加到Thorarin的答案,您可以更改filterall函数以接受数组作为输入,并通过引用传递它将修改数组的内容。
$tofilter = array($city,$state,$division,$title);
filterall($tofilter);
答案 6 :(得分:1)
我没有看到它提到,你总是可以通过参考传递参数来跳过重复的作业:
function FilterALLHTML(&$var)
{
if ($var == null)
{
$var = null;
}
else
{
$var = strip_tags($var);
}
}
我相信你也可以在数组中存储引用,但我还没试过。
foreach (array(&$city, &$state, &$title, &$division) as $var)
{
FilterALLHTML($var);
}
答案 7 :(得分:0)
我认为你不能提高性能,但你可以缩短语法,但最终会与解释器相同
<?PHP
$city = ($city == NULL) ? "default value" : FilterALLHTML($city);
$state = ($state == NULL) ? "default value" : FilterALLHTML($state);
$title = ($title == NULL) ? "default value" : FilterALLHTML($title);
$division = ($division == NULL) ? "default value" : FilterALLHTML($division);
?>
如果变量为空,“默认值”应替换为您希望的值