我必须构建一个高级搜索功能,其中一些选项很复杂。例如:
- 处于联机状态
- 有评论
- 等等
为了获得这些信息,我不能直接查询数据库。因此,我需要构建函数来实现这一点。
比方说。。。用户选择4或5个选项-如何组合多个功能结果?
做这样的事情是没有意义的:
if(is_Online() && have_Comments()...)
因为我不知道选择了哪些或多少选项。。。所以我认为应该有一些动态的替代方案?
谢谢。
如果没有更多细节,很难提供更好的答案,但这可能会对您有所帮助。以下假设当每个复选框未选中或与该复选框关联的逻辑返回true时,if语句将继续。
我倾向于将每个函数存储在一个数组中,并根据您正在查看的字段的名称动态调用它们
<?php
$resultCheckers = array(
'is_Online' => function() { /* Is Online logic here */},
'have_Comments' => function() { /* Have Comments logic here */}
);
function IsUncheckedOrHasValue($parameter)
{
$result = true;
//Check if user has checked the box for this parameter
if(array_key_exists($parameter, $_POST))
{
//Check if this is a valid key in your $resultCheckers
if(array_key_exists($parameter, $resultCheckers))
{
//Run the result Checker
$result = $resultCheckers[$parameter]();
} else {
$result = false;
}
}
return $result;
}
?>
你的if语句看起来像这样:
if(IsUncheckedOrHasValue('is_Online') && IsUncheckedOrHasValue('have_Comments'))
{
...
}
这读起来有点费力,所以如果你想的话,你可以把它进一步抽象成它自己的函数,如下所示:
function IsMatch()
{
$isMatch = IsUncheckedOrHasValue('is_Online') &&
IsUncheckedOrHasValue('have_Comments') &&
IsUncheckedOrHasValue(...) &&
IsUncheckedOrHasValue(...);
return $isMatch;
}
那么你的if语句最终会变成
if(IsMatch())
{
...
}
注意:我有点困惑,您没有将有关结果的任何信息传递给您的检查函数。你写的是面向对象的吗?这些信息在当前对象中是可用的吗?或者,为了简洁起见,您可能只是省略了这些额外的参数。无论如何,我希望这能对你有所帮助,而且在离开PHP一段时间后重新学习PHP是很有趣的:)