Vous devez passer des arguments dans l'ordre que vous déclarez dans votre signature de la méthode, si elles sont en option ou non. Cela signifie que vous devez spécifier $x
avant $y
, quoi qu'il arrive.
Si vous n'avez pas besoin de passer une autre valeur de $x
, vous devrez passer null. Vous pouvez sauter encore les arguments optionnels restants, bien sûr:
$object->doSomething(NULL, 3)
De plus, PHP ne supporte pas les arguments nommés. Par conséquent, vous ne pouvez pas écrire explicitement $y
dans le code appelant car en PHP, il définit $y
dans la portée du code appelant, et non la portée du corps de la méthode doSomething()
.
EDIT: par la suggestion de DPK, comme une route alternative, vous pouvez changer la méthode d'accepter un hachage (tableau associatif) à la place, et éventuellement remplacer certains paramètres par défaut et extract()
les valeurs de celui-ci dans la portée:
public function doSomething(array $args = array()) {
$defaults = array('x' => NULL, 'y' => NULL, 'a' => NULL, 'b' => NULL);
extract(array_merge($defaults, $args));
// Use $x et al as normal...
}
Dans votre code d'appel:
$object->doSomething(array('y' => 3));
Droite. La façon de faire cela comme l'OP s'attend à passer un seul hash comme argument (array ('y' => 3)) ou une structure de données similaire (object ..) –
Merci pour cela - pour une raison quelconque j'étais sous l'hypothèse que vous pourriez faire ce que je faisais. Doit avoir été une autre langue rampante! – Dan