2015-05-10 20 views
2

我有一个函数php函数参数默认值 - 如何知道def。价值被应用了?

function my_func($id,$arg1='aaa',$arg2='bbb'){ 
if($arg1=='aaa'){ 
    //means that def. value applied, real argument has not been provided 
} 
if($arg1=='bbb'){ 
    //means that def. value applied, real argument has not been provided 
} 
} 

检查我的值是默认的,我会做的一件事,如果不是 - 是另一回事。 但我的用户可以调用像

my_func($id,'aaa','bbb') 

我的功能,所以他提供了真正的价值。我如何知道这些值在我的代码中是真实的,而不是默认值?

+0

你是冲突你的问题本身?根据第一个你在第二个代码中给出的def值并不是真正的参数。所以请让你的问题更清楚。 –

+2

你不能。使用'NULL'作为隐含值,并自己设置默认值。更重要的问题是为什么你想区分调用者或运行时提供的相同值。 – mario

+0

谢谢!对不起,我不明白为什么我的问题本身就是相互冲突的。我需要知道什么时候在我的代码中有def值,并且当用户提供了所有参数,但值与默认值相同时。问题是def的逻辑是不同的。和真实的价值。如果两个边是相同的,那么这是一个问题。换句话说,my_func(10000)和my_func(10000,'aaa','bbb')会做完全不同的事情,但在my_func里面,没有任何信息是那些值默认或不是。我希望现在更清楚。谢谢 – avalon

回答

2

在PHP中,当用户提供一个可选参数的默认值时,结果为,正好是,与参数不存在时相同。没有办法来区分差异。

可以做的是设计你的函数,以便默认值不能与实际有用的参数混淆。然后,您可以检测到这种情况,并提供您在此情况下想要使用的真实的值。例如:

function my_func($id,$arg1=null,$arg2=null){ 
if($arg1===null){ 
    $arg1 = "aaa"; 
    // do other default things 
} 
if($arg2===null){ 
    $arg2 = "bbb"; 
    // do other default things 
} 
} 

如果呼叫者与"aaa"调用函数,它不会被误认为是默认参数。当然,调用者总是可以调用函数null作为值,这与无缺少的参数是无法区分的;但这不是一件真正的坏事,特殊的价值观只是意味着“做默认的事情”。

+0

谢谢!是的,我想到了空值,但决定在你的帮助下弄清楚。换句话说,我们有一个func check_pwd($ site_id,$ login ='def_login',$ passwd ='def_pwd')。但是如果登录/传递偶尔会是'def_login'和'def_pwd'呢?但是上面提供的解决方案并不能涵盖用户需要提供空值的情况。所以在这种情况下,我想我需要考虑系统中保留的特殊def值。我认为有那样的规格常量或功能在PHP中可能会检查是否提供了参数。据我所知,它不存在。谢谢 – avalon

+0

对不起,我不知道你在评论中想说什么! – alexis

+0

对不起,我刚刚编辑它,它并没有完全保存。谢谢 – avalon