1

我将参数传递给 PHP 中的函数。我不知道参数是否已定义。现在我检查参数是否已定义,如果没有,则在调用函数之前转换为 null。有没有更优雅的方式通过铸造或类似的方式来做到这一点?如果未定义参数,我希望使用函数默认值。

例子:

//Params['x'] may or may not be defined
// I want to use this:
a(params['x']);

//Currently I use this (which I want to avoid) :
a( isset (params['x'])?params['x']:null);


function a (data=null){
// Here I want data to be null  if params['x'] is not defined. 
}
4

3 回答 3

3

如果您将此参数声明为参考,则可以:

function fun(&$param = null) {

}

请记住,如果它不存在于传递的数组中,它也会创建这个条目,所以如果你有

$x = array('a' => 1);

你会打电话fun($x['b']);,你的$x会看起来像

$x = array('a' => 1, 'b' => null);
于 2013-07-10T16:35:08.007 回答
0

对于您不确定是否存在的所有内容,必须有一个点可以测试和/或确保它存在。您可以使用isset/empty或使用确保值存在的操作来做到这一点,例如:

$params += array('x' => null);

你不应该设计你的函数来解决调用者可能没有的参数。如果函数需要参数,则让它需要参数,句点。越早摆脱代码中可能存在或可能不存在的模式,您就越早需要并返回定义的值,这会减少您需要编写和调试的代码量。我的意思是唯一的不确定性应该是用户输入。尽早将不确定的用户输入打入定义的表单,之后您的应用程序内部应该严格要求它需要什么以及返回什么,而不是在每个点上都不确定。

于 2013-07-10T16:45:12.037 回答
0

你已经做的就是你需要做的。

使用这个函数原型,你说的是,接受调用者可能传递的任何参数,或者如果没有传递任何参数,则使用 NULL。

function a ($data=null){
    if ( $data == null ) {
       // no parameter passed by caller
    }
}

忘记在函数调用时对参数的所有大惊小怪。这一切都为你完成。

于 2013-07-10T16:50:50.360 回答