让我们说我们的函数有5个变量。
function func($var1, $var2, $var3, $var4, $var5 )
{
if ($var1==1)
{
work with $var2, $var3
}
if ($var1==2)
{
work with $var4, $var5
}
}
例如,我们想要调用此函数:func(1,$var2, $var3)
(没有未使用的变量)或类似func(2,$var4, $var5)
。
有可能吗?如何将精确变量发送到php函数?
更新 根据@ marcus的回答,我修改了我的功能。
<?
function GenerateTopNav($current, $lang, $db)
{
$result=$db->query("SELECT `id`, `parent`, $lang FROM `nav` WHERE `menu`='1'");
while ($row=$result->fetch_object()){
echo '<a ';
if($row->id==$current)
echo 'class="active"';
echo 'href="index.php?id='.$row->id.'">'.$row->$lang.'</a> | ';
}
function GenerateLeftNav($parent, $level, $lang, $db){
$q = $db->query("SELECT `id`, `$lang` AS name FROM nav WHERE parent = '$parent' AND `menu`='2'");
if($level > 0 && $q->num_rows > 0){
echo "\n<ul>\n";
}
while($row=$q->fetch_object()){
echo "<li>";
echo '<a href="?page=' . $row->id . '">' . $row->name . '</a>';
//display this level's children
GenerateLeftNav($row->id, $level+1, $lang, $db);
echo "</li>\n\n";
}
if($level > 0 && $q->num_rows > 0){
echo "</ul>\n";
}
}
}
?>
答案 0 :(得分:3)
您不应该尝试将这些东西打包成一个功能。每个功能都应该只有一个目的和一个目的。如果这两个任务非常相似,你可以这样做,但这里没有给出。
您可以而且应该做的是将代码分解为接管类似位的较小函数。例如,您可以使用名为createLinkMarkup()
的函数,该函数将返回一个链接元素的HTML标记。然后你可以从'母亲' - 函数调用这个函数。
但更为重要是你做错的一些事情:
createMenuMarkup()
createSubmenuMarkup()
。这些名字是可读的。几个星期之后你必须再次阅读你的代码并且对于任何看到你的代码的其他编码人员都有好处......就像我们一样。$var
。对于可读性而言,这是最糟糕的事情(可读性=代码质量)。使用描述容器的名称,使用名词来描述你正在传递的内容。 @animuson说的不是真的,你需要正确命名你的变量。是的,您的代码将使用模糊名称,但它不可读=可维护=值得生存。$lang
传递给您的查询,它来自哪里,可能来自查询字符串?如果它可以被用户操纵,那么你就处于危险之中。使用预备语句或至少mysql_real_escape_string
来防止这种情况发生。答案 1 :(得分:0)
您可以使用数组:
function func($var1, $array )
{
if ($var1==1)
{
work with $array["var2"], $array["var3"]
}
if ($var1==2)
{
work with $array["var4"], $array["var5"]
}
}
并将其称为:
func(1, array(
"var2" => "foo",
"var3" => "bar"
));
答案 2 :(得分:0)
对于可选参数,您可以为它们设置默认值:
func($val1,$val2,$val3 = 0,$val4 = 0)
你无需打电话给他们。
func($val1,$val2)
答案 3 :(得分:0)
为什么你甚至需要指定4个变量?您基本上是说为该类型指定一个类型然后输入2个变量,所以如果总有3个变量,那么只需执行以下操作:
function ($type, $var1, $var2) {
if ($type === 1) {
// $var1 = lang and $var2 = current
// do something with var1 and var2
} else {
// $var1 = parent and $var2 = level
// do something else with var1 and var2
}
}
你真的不需要使用过多的不会被使用的变量来垃圾邮件。
要更清楚:变量不需要需要,你只需要评论如果type = 1,这两个变量意味着这两件事,如果type = 2 ,这两个变量意味着这两个因素并相应地处理这两种类型。