我必须构建一个高级搜索功能,其中一些选项很复杂。例如:
要获取此信息,我无法进行直接数据库查询。所以,我需要构建函数来做到这一点。
假设...用户选择4或5个选项 - 如何组合多个功能结果?
执行以下操作是没有意义的:
if(is_Online() && have_Comments()...)
因为我不知道选择了哪个或多少个选项...所以我认为应该有一些动态的选择?
谢谢。
答案 0 :(得分:2)
如果没有更详细的信息,很难提供更好的答案,但这可能会对您有所帮助。以下假设您的if语句将在未选中每个复选框或与该复选框关联的逻辑返回true时继续。
我倾向于将每个函数存储在一个数组中,并根据您正在查看的字段的名称动态调用它们。
<?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很有趣:)