PHP - 将变量传递给函数而不传递之前询问的变量?

时间:2011-09-29 21:38:47

标签: php

是否可以将变量传递给函数而不传递函数定义中的变量?

例如,如果我的函数如下所示:

function doThis( $v1, $v2, $v3 )
{
    echo $v1.$v2.$v3;
}

然后我可以只使用其中一些变量调用该函数,例如doThis("v1",null,"v3")或其他方式吗?

6 个答案:

答案 0 :(得分:2)

您可以使用预定义的参数:

function doThis( $v1, $v2 = "hello", $v3 = 1 ) {}

仅使用第一个参数调用此函数,第二个和第三个将为“hello”,1为defualt:

doThis(10);

答案 1 :(得分:2)

@Alon帖子上的

+1

您也可以使用数组..

$array['var1'] = null;
$array['var2'] = "foo";
$array['var3'] = "bar";


doThis($array);

function doThis($theArray){
 var_dump($theArray);
}

这样,您可以使用空值和N amout变量。

答案 2 :(得分:1)

您可以在函数定义中指定默认值,如下所示:

function doThis($a, $b=null, $c=null) {
    echo $a . $b . $c;
}

doThis("hello", " world"); // yields: hello world

在此函数中,$ a是必需参数。其他两个值是可选的。

为了安抚下面的评论者,你当然可以像这样调用这个函数:

doThis("hello", null, "world");

当然,你没有提供默认值(但这样做是个好主意)

答案 3 :(得分:1)

是的,如果您准备函数来处理doThis("v1",null,"v3")参数,则可以执行null

例如,您的示例可以正常工作。

或者,如果有意义,您可以更改参数的顺序,以便设置默认值。

答案 4 :(得分:1)

答案是:重新设计您的工作流程

我知道你不喜欢这个答案,但老实说,如果你传递的参数超过3个,或者有时候你不想传递部分开始参数,你可能想重新考虑你在做什么。函数和方法调用应该很简单。你的功能可能太多了。

一般提示:

  • 在适当的时候使用类。这样您就可以避免传递一些信息,因为它存储在类中,您的方法可以访问它。
  • 保持方法的凝聚力。这意味着您的方法和功能应该做一件事,做得好。
  • 有时只在后面放置您想要传递的变量。如果它们后面有$var=null,您就可以直接传递它们。然后,在使用它之前检查是否$var===null

答案 5 :(得分:0)

更清晰的方式是传递一系列变量,如@jflaflamme所示。

另一种方法是允许任意数量的变量,如:

function foo()
{
    $arguments = func_get_args();

    if(sizeof($arguments))
    {
        echo implode('', $arguments);
    }
}

foo(1, 2, 3, $some_var);

你也可以循环通过func_get_args获得的数组,检查它们的类型(如果它是null,数组,对象 - 你命名它),然后以你认为合适的方式处理它们。 / p>