繁体   English   中英

这个PHP代码可以改进吗?

[英]Can this PHP code be improved?

下面有一个更好的方法来完成这个简单的任务吗? 喜欢数组甚至是其他方法?

<?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;
}

更改您的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实现与第一个示例不同

是的,使用PHP的变量变量

$vars = array('city','state','title','division');
foreach($vars as $v) {
    if ($$v != null) $$v = FilterAllHTML($$v);
}

如果您知道所有变量先前已定义的事实,那么您不需要空检查。 否则,空检查将阻止触发E_NOTICE错误。

foreach (array('city', 'state', 'title', 'division') as $var) {
    if ($$var != null) {
        $$var = FilterALLHTML($$var);
    }
}

就像Thorarin一样,我建议让你的FilterALLHTML函数检查为null。

好吧,你可以考虑编写一个函数,因为你做了四次完全相同的事情。

假设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;
    }
}

zombat的答案是最好的,但我补充说你不应该真正检查null 如果由于某种原因FilterAllHTML有一个问题, null值,它不应该,把检查nullFilterAllHTML函数定义。

$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
    $$var = FilterAllHTML($$var);
}

添加到Thorarin的答案,您可以更改filterall函数以接受数组作为输入,并通过引用传递它将修改数组的内容。

$tofilter = array($city,$state,$division,$title);


filterall($tofilter);

我没有看到它提到,你总是可以通过引用传递参数来跳过重复的赋值:

function FilterALLHTML(&$var)
{
    if ($var == null)
    {
        $var = null;
    }
    else
    {
        $var = strip_tags($var);
    }
}

我相信你也可以在数组中存储引用,但我没有尝试过。

foreach (array(&$city, &$state, &$title, &$division) as $var)
{
  FilterALLHTML($var);
}

我不认为你可以提高性能,但你可以缩短语法,但它最终将与解释器相同

<?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);
?>

如果变量为null,则应将“default value”替换为您希望该值的值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM