php,如何简化一个 php 脚本?
Posted
技术标签:
【中文标题】php,如何简化一个 php 脚本?【英文标题】:php, how to simplify a php script? 【发布时间】:2011-10-04 16:52:49 【问题描述】:我不确定这是一个好问题,但这是我的问题。我有一个 if
语句太长了,我想知道是否有其他类型的语法可以缩短它:
if (($time1 <= $one_day)&&
($time2 <= $one_day)&&
($time3 <= $one_day)&&
($time4 <= $one_day)&&
($time5 <= $one_day)&&
($time1 != NULL)&&
($time2 != NULL)&&
($time3 != NULL)&&
($time4 != NULL)&&
($time5 != NULL))
//do sometihng
这是一个例子,但我有一个类似的例子,最高可达..&&($time15 <= $one_day)
。
声明很容易解释,$time1, $time2, etc
可以返回空,所以我必须检查它们是否是 NULL
有什么想法吗?
谢谢
【问题讨论】:
如果这些时间中的任何一个是 0 怎么办? 基于我的脚本,它不能。但好点。 【参考方案1】:你可以把通用的东西放在一个函数中:
function validate_time($time, $one_day)
return $time <= $one_day && $time != NULL;
if (validate_time($time1, $one_day) &&
validate_time($time2, $one_day) &&
validate_time($time3, $one_day) &&
validate_time($time4, $one_day) &&
validate_time($time5, $one_day))
// do something
您可能希望重构代码并消除复制和粘贴这些检查的需要。完成工作的另一种方法:
while (true)
foreach (array($time1, $time2, $time3, $time4, $time5) as $time)
if ($time > $one_day || $time == NULL)
break 2;
// do something
break;
上面的内容也可以放在一个函数中,这会使while循环和break
关键字变得多余。然后用 return 替换 break 2
。
【讨论】:
使用!= NULL
可能比使用is_null()
更好,显然是more than 14 times quicker :-)【参考方案2】:
为变量使用数组会有所帮助。您可以遍历它们并检查。
【讨论】:
【参考方案3】:将时间放在一个数组中,并使用for
循环进行检查。
【讨论】:
【参考方案4】:考虑使用数组,而不是使用 15 个相似但不同的变量。
【讨论】:
【参考方案5】:如果您必须(或想要)保留原始变量名而不使用数组,这是一个很好的解决方案(对于 $time1 到 $time5):
$ok = true;
for ($i = 1; $i <= 5; $i++)
$var =& $'time'.$i;
if ( ! ($var <= $one_day && $var != NULL))
$ok = false;
if ($ok)
//do something
【讨论】:
可以进一步简化 `if ($var > $one_day) $ok = false;break; 【参考方案6】:您可以将所有值设置为一个数组并使用 For 循环进行比较。
【讨论】:
【参考方案7】:一个有助于您重复使用的功能化版本。这类似于 Lekensteyns 代码。
$times = array(
'time',
'time',
'time',
'time',
'time',
);
function validateTime($checks, $limit)
foreach($checks as $check)
if($check == null || $check > $limit)
return false;
return true;
if(validateTime($times,$one_day) == true)
//codey code.
【讨论】:
以上是关于php,如何简化一个 php 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在等待 php 客户端脚本的回复时终止 php 服务器脚本? [复制]
如何使用 pdo 将字符串数组传递给 php 中的 plsql 例程