0
votes

Comment faire la distinction entre les paramètres non spécifiés et spécifiés dans les méthodes PHP?

Je me retrouve à réfléchir de temps en temps, alors je pensais que je demanderais une contribution de la communauté. Compte tenu de la méthode PHP suivante: xxx

Le type de valeur d'un "réglage" peut être n'importe quel type primitif, y compris la valeur NULL. Réglage de la valeur du paramètre "FOO" (selon E.G. a actuellement la valeur 42) à NULL ne fonctionnera pas avec cette méthode. J'ai vu et utilisé plusieurs façons de contourner cela au fil des ans, mais y a-t-il quelque chose qui est considéré comme une meilleure pratique ici?


5 commentaires

Pourquoi avez-vous besoin de vérifier contre le non-NULL pour définir la valeur? Sûrement de toute façon que vous définissez la valeur (pour NULL ou tout ce qui est passé)?


Pourquoi n'utilisez-vous pas le nom de paramètre paramètre? Ne devrait-il pas être ceci-> setsettingtingvalue ($ nom, valeur $); ?


' mais y a-t-il quelque chose qui est considéré comme une meilleure pratique ici? ' - Oui, soyez explicite et séparez vos getters et vos setters.


@ Splash58 Vous avez raison - j'ai mis à jour l'exemple.


@ Script47 Je ne suis pas en désaccord avec cela, et je sais que mon exemple n'est pas le meilleur pour illustrer lorsque vous auriez vraiment besoin de faire la distinction entre les deux situations. Il aurait pu être reformulé de se concentrer sur la caractéristique manquante de la surcharge de la méthode dans PHP.


3 Réponses :


2
votes

Vous pouvez utiliser func_num_args () pour savoir combien d'arguments ont été transmis à une fonction: xxx

sortie: xxx

démo sur 3v4l.org


0 commentaires

0
votes

Je vais présumer la classe que ce paramètre code> code> appartient à vous est écrit par vous. Ou bien il n'y a rien d'autre que vous puissiez vraiment faire.

Je pense que la solution claire consiste à avoir un tableau supplémentaire qui marque la valeur "sale". P>

/**
 * Sets and/or provides the value of a setting.
 *
 * @param string $name The name of the setting.
 * @param mixed|null $value The new setting value, null to leave unchanged.
 * @return mixed The setting value.
 */
public function setting(string $name, $value = null) {
    if ($value !== null) {
       $this->setSettingValue($value);
    }
    $this->dirty[$name] = true; // add this line to mark which settings is set
    return $this->getSettingValue($name);
}


0 commentaires

0
votes

Ceci est un bon cas pour obtenir des méthodes d'obtention et de définition séparées, mais je suppose que ce n'est pas la réponse que vous recherchez.

Qu'est-ce que vous utilisez la valeur par défaut de toute façon? Dans cet exemple, on dirait que vous ne l'utilisez que pour attraper le cas où aucune valeur n'a été passée. Dans ce cas, je ferais par défaut un type de valeur en dehors de la plage de valeurs valides possibles.

E.g si un bool n'est pas une valeur valide, je voudrais une valeur par défaut à cette $ valeur = false

Si tous les types scalaires sont des options valides, par défaut sur un tableau vide ou stdclassObject

Mais encore une fois, avoir une méthode get / définie unifiée (oui, même une enveloppe autour des méthodes de get / Set appropriées) est considérée comme une mauvaise conception


0 commentaires