这个PHP代码可以改进吗?
有没有更好的方法来完成下面这个简单的任务?比如数组或者其他方法这个PHP代码可以改进吗?,php,Php,有没有更好的方法来完成下面这个简单的任务?比如数组或者其他方法 <?PHP // current way if ($city != NULL) { $city = FilterALLHTML($city); } if ($state != NULL) { $state = FilterALLHTML($state); } if ($title != NULL) { $title = FilterALLHTML($title); } if ($division !=
<?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;
}
函数filteralhtml($document){
//旧数组行//“si”,//strip html
$text=带标签($document);
$search=数组(“/f.?u.?c.?k/i”,
“/(s |$)?h?i?t/i”,
“/(potspace | mycrib | palbolt)/i”);
$text=preg_replace($search,,$text);
返回$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;
}
函数filteralhtml($var){
//旧数组行//“si”,//strip html
如果($var!=null){
$text=strip_标签($var);
$search=数组(“/f.?u.?c.?k/i”,
“/(s |$)?h?i?t/i”,
“/(potspace | mycrib | palbolt | potspace)/i”);
$text=preg_replace($search,,$text);
返回$text;
}
返回null;
}
更改filteralhlhtml
函数以执行null
检查并使其返回null
?
然后你可以扔掉所有的if
s
例如:
function FilterALLHTML($input)
{
if ($input === null)
return null;
// Original code, I'll just use strip_tags() for a functional example
return strip_tags($input);
}
编辑:
我想分享变量的另一种选择,因为我不太喜欢用字符串文字代替变量名。一路引用:)
函数filteralhtml(&$text)
{
如果($text!==null)
{
//为简单起见,省略了正则表达式位
$text=带标签($text);
}
}
$city=“纽约”;
$state=null;
$title=“先生”;
$fields=数组(&$city,&$state,&$title);
foreach($fields as&$var)
filteralhtml($var);
(注意:
filteralhtml
实现与第一个示例不同)我不认为您可以提高性能,但您可以缩短语法,但最终对解释器来说是一样的
<?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
那么,你已经可以考虑写一个函数了,因为你做了同样的事情四次。 假设FilterALLHTML不是自定义函数function Filter($var)
{
if ($var != null)
{
return FilterALLHTML($var);
}
return null;
}
或者只在filteralhtml函数中包含null检查,并在需要时从那里返回null
因此,如果您可以更改FilterALLHTML,那么您可以这样做:
function FilterALLHTML($var)
{
if ($var == null)
{
return null;
}
else
{
//do your filtering
return $filteredVar;
}
}
是的,使用PHP的
如果您知道所有变量都是先前定义的,那么就不需要空检查。否则,空检查将阻止触发E_NOTICE错误。除了Thorarin的答案之外,您可以更改filterall函数以接受数组作为输入,并通过引用传递它,它将修改数组的内容
$tofilter = array($city,$state,$division,$title);
filterall($tofilter);
就像我建议让你的
filteralhtml
函数检查空值一样。zombat的答案是最好的,但我要补充的是,你也不应该真正检查null
。如果由于某种原因,filteralhlhtml
对null
值有问题,而该问题不应该出现,请在filteralhlhtml
函数定义中检查null
$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
$$var = FilterAllHTML($$var);
}
我没有看到有人提到,您可以通过引用传递参数来跳过重复的赋值:
function FilterALLHTML(&$var)
{
if ($var == null)
{
$var = null;
}
else
{
$var = strip_tags($var);
}
}
我相信您也可以在数组中存储引用,但我还没有尝试过
foreach (array(&$city, &$state, &$title, &$division) as $var)
{
FilterALLHTML($var);
}
+1我喜欢你的回答,也许你可以在回答中对那些不明白的人更详细一点:)请对否决票发表评论?我不介意,但我想要一些建设性的批评。不要仅仅因为这不是你的答案就投反对票:)@Thorarin-从线程的外观来看,这是一个驾车经过的反对票。我也被击中了/@Thorarin&@Zombat,是的,有人把几乎所有人的票数都降到了-1,然后我把所有人的票数都降到了0,5分钟后他们又都是-1,我可能会把这个检查添加到我当前的函数中,因为我经常使用这个函数,我只是把4放在这个页面上,例如,但是你的代码真的很酷!我会去的。使用该函数感谢现在回想一下,当我在大约2年前编写此代码时,我想我读到,在这种情况下,如果不需要FilterALLHTML函数,则不调用该函数会有更好的性能,比如空值不需要该函数,所以我想如果我可以在调用该函数之前过滤掉这些,那会更好。我不确定这是否是更好的表现,因为我已经很久没有这样做了。如果你想看到itah,我已经在我的帖子中添加了我的函数,被否决了:(请评论。这将比在函数中添加“如果”提供更好的性能。如果“如果”在函数中,它将始终调用函数和“如果”,但添加“如果”首先,你会节省CPU值,因为空值没有被否决,但是我不认为你的微优化是一个有效的论据。而且,这个代码比原来的可读性差,而且功能不同于原来的。我也没有投票,但是我能理解为什么它被否决了。IMO你只是移动了复杂性而不是真希。让它更容易/更简单,比如Thorarin:)我猜只有我一个人,但我更喜欢“if”和“else”两种情况下的内联if语句只有一个语句,但是ye,我没有改变性能:dwy你想阻止用户说“frutcake”或“as heist”吗?
$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
$$var = FilterAllHTML($$var);
}
function FilterALLHTML(&$var)
{
if ($var == null)
{
$var = null;
}
else
{
$var = strip_tags($var);
}
}
foreach (array(&$city, &$state, &$title, &$division) as $var)
{
FilterALLHTML($var);
}