У меня есть функция
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')
Таким образом, он предоставил реальные ценности. Как я знаю, что эти значения реальны в моем коде, а не по умолчанию?
В PHP, когда пользователь задает значение по умолчанию для необязательного аргумента, результатом является именно так так же, как когда аргумент отсутствует. Там нет никакого способа, чтобы отличить.
Что ты Можно do разрабатывает вашу функцию так, чтобы значения по умолчанию не могли быть перепутаны с фактическими, полезными аргументами. Затем вы можете обнаружить этот случай и указать значения, которые вы действительно хочу использовать в этом случае. Например:
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
как значение, которое будет неотличимо от отсутствующих аргументов; но это на самом деле не так уж и плохо, специальные значения просто означают «делать вещи по умолчанию».
Других решений пока нет …