Je travaille sur une nouvelle application dans laquelle je dois appeler une fonction amqp pour publier un message sur un échange de rabbitmq. Je veux accepter la valeur par défaut du troisième paramètre (flags), mais passer un tableau dans le quatrième paramètre (attributes). Le passage d'une chaîne vide (pratique courante dans un autre langage que j'utilise fréquemment) a fait échouer la méthode de publication.
Comme je ne possède pas le code des bibliothèques php amqp, je ne peux pas redéfinir les paramètres des fonctions pour les adapter à mon application. Je devais donc trouver une solution à la même question que vous. Finalement, le passage d'un mot-clé null est ce qui a fonctionné :
$result = $exchange->publish($message, $routing.key, null, $attributes);
Malheureusement, je ne sais pas si cela fonctionnerait avec toutes les fonctions php. Cela dépendrait du fait que la fonction vérifie en interne les valeurs nulles avant de définir les valeurs par défaut, comme Jeroen l'a suggéré ci-dessus. Si une approche plus simple est utilisée, comme le comptage du nombre de paramètres entrants, cela échouerait très probablement.
Je suis assez novice en matière de php, donc je n'en suis pas sûr. Mais j'espère que l'approche de Jeroen en matière de vérification des nullités est une pratique de codage standard pour les paramètres optionnels, et que nous pouvons nous attendre à ce que le 'null' fonctionne avec la plupart ou la totalité des fonctions php.
0 votes
Je ne comprends vraiment pas votre question / problème votre deuxième exemple fonctionne bien
0 votes
Le problème n'est pas que la fonction
1 votes
Je m'excuse de ne pas avoir été clair. Mais franchement, je ne sais pas comment exprimer 'assumer la valeur par défaut pour un paramètre qui n'est PAS le dernier de la liste des paramètres'.
1 votes
Est-ce que ma suggestion de spécifier un
null
valeur par défaut n'apporte pas de solution ? Je me demande juste pourquoi quelqu'un s'y est opposé suffisamment pour le noter sans commenter pourquoi.0 votes
Je ne comprends pas pourquoi tu veux faire ça. Si vous avez le contrôle sur les paramètres de la fonction, pourquoi ne pas les trier de la bonne manière. Pour moi, un paramètre qui a une valeur par défaut est moins important que les paramètres qui n'en ont pas.