Ne yazık ki ne yapmaya çalışıyoruz bunu yaparken hiç "sözdizimsel şeker" bir yolu vardır. Hepsi WTF biçimleri değişen ediyoruz.
Eğer keyfi parametre tanımlanmamış bir dizi alır bir işlevi ihtiyacınız varsa,
function foo () {
$args = func_get_args();
# $args = arguments in order
}
Hile yapmak olacaktır. Php için bu büyülü tarafında biraz, çünkü çok fazla kullanmaktan kaçının deneyin.
Daha sonra isteğe bağlı varsayılan uygulamak ve parametre sayısı dayalı garip şeyler yapabilirdi.
function foo(){
$args = func_get_args();
if( count($args) < 1 ){
return "John Smith";
}
if( count($args) < 2 ) {
return "John " .$args[0];
}
return $args[0] . " " . $args[1];
}
Ayrıca, isteğe bağlı Perl tarzı parametrelerini taklit olabilir,
function params_collect( $arglist ){
$config = array();
for( $i = 0; $i < count($arglist); $i+=2 ){
$config[$i] = $config[$i+1];
}
return $config;
}
function param_default( $config, $param, $default ){
if( !isset( $config[$param] ) ){
$config[$param] = $default;
}
return $config;
}
function foo(){
$args = func_get_args();
$config = params_collect( $args );
$config = param_default( $config, 'firstname' , 'John' );
$config = param_default( $config, 'lastname' , 'Smith' );
return $config['firstname'] . ' ' . $config['lastname'];
}
foo( 'firstname' , 'john', 'lastname' , 'bob' );
foo( 'lastname' , 'bob', 'firstname', 'bob' );
foo( 'firstname' , 'smith');
foo( 'lastname', 'john' );
Tabii ki, bu would Burada bir dizi argüman kullanmak daha kolay olabilir, ancak seçim şeyin (hatta kötü yolları) için izin verilen konum.
notedly, this is nicer in Perl because you can do just foo( firstname => 'john' );