J'ai créé une classe appelée calculatrice avec la fonction Ajouter, soustraire, multiplier et diviser. La calculatrice est limitée à ajouter deux nombres et à renvoyer le résultat. Je suis relativement nouveau à OOP, aimerais avoir une contribution sur la classe, ai-je pris la longue route et si je l'ai fait, il y a une autre façon de simplifier la classe.
Voici le code: P>
class Calculator {
private $_val1 , $_val2;
public function __construct($val1, $val2){
$this->_val1 = $val1;
$this->_val2 = $val2;
}
public function add(){
return $this->_val1 + $this->_val2;
}
public function subtract(){
return $this->_val1 - $this->_val2;
}
public function multiply (){
return $this->_val1 * $this->_val2;
}
public function divide () {
return $this->_val1 / $this->_val2;
}
}
$calc = new Calculator(3,4);
echo "<p>3 + 4 = ".$calc->add(). "</p>";
$calc = new Calculator (15,12);
echo "<p>15 - 12 = ".$calc->subtract(). "</p>";
$calc = new Calculator (20,2);
echo "<p> 20 * 2 = ".$calc->multiply(). "</p>";
$calc = new Calculator (20,2);
echo "<p> 20 / 2 = ".$calc ->divide(). "</p>";
6 Réponses :
Vous devriez probablement finir par faire quelque chose comme jeter un coup d'oeil à cet exemple. Vous pouvez donner n'importe quel nombre d'arguments comme celui-ci à l'aide de func_num_args () p>
En général, nous ne fixons pas de valeur dans ce genre de classe. Vos méthodes devraient prendre leurs 2 valeurs par des arguments au lieu de choisir des membres privés.
Comme ce qui suit: p> Ainsi, la calculatrice devient un outil, et nous n'avons pas besoin de allouer ce genre d'objet.
C'est pourquoi les méthodes de calcul des calculatrices doivent être de cette manière, tout ce que vous devez appeler est N'oubliez pas que c'est un moyen de le faire, ni le meilleur ni le pire. P> P> calculatrice :: Ajouter (1, 2) code>.
Vous pouvez trouver ces types de cours partout. Comme vecteur, matrice en mathématiques ou 3D. Ou écrivez à la sortie ou à quelque chose comme ça. P>
Utiliser des méthodes statiques réduit la vérification de la qualification . Ils peuvent être une bonne idée de simples fonctions utilitaires qui calculent une formule (comme dans ce cas), mais si vous souhaitez que vos classes soient testables, n'utilisez pas de méthodes statiques.
Vous pourriez aimer lire sont des méthodes statiques / variables, une mauvaise pratique? - cette réponse de Mec est un "oui" défini. Je serais d'accord.
Je ne pense pas qu'une calculatrice simple est un bon exemple pour OOP. Un objet a besoin d'un ensemble de méthodes et d'un ensemble de variables qui représentent son état et peuvent être utilisés pour différencier des instances de l'objet. Je suggérerais d'essayer de faire des calculatrices "Moody". Une calculatrice avec une bonne humeur ajoutera 2 à chaque résultat et une calculatrice en colère soustraire 2 de chaque résultat. p>
IMHO, vous devez utiliser le polymorphisme.
Cette vidéo peut vous aider à comprendre ce principe
Voici ma façon de penser. p>
Tout d'abord, définissez une interface pour toutes les opérations dont vous auriez besoin p> puis, créez le support de calculatrice p> Ensuite, vous pouvez définir une opération, par exemple, addition p> et vous l'utiliseriez comme: p> Avec ce point, si vous souhaitez ajouter un nouveau comportement, ou modifiez une classe existante, créez ou modifiez une classe. P> Par exemple, dites que vous voulez une opération de module P> - app/
- lib/
- Calculator/
- Operation/
- Addition.php
- Modulus.php
- Substraction.php
- OperationInterface.php
- Calculator.php
Peut-on aussi bien mettre des capacités de chaînage pour faire echo $ calculatrice-> setoperands (tableau (4,2)) -> setoperation (nouvel ajout) -> processus (); code> possible?
Ajouter simplement Renvoyer $ ceci; code> sur setoperands code> et setoperation code> méthodes
J'aime Stackoverflow.
Cette tâche a beaucoup de solutions, voici l'un d'entre eux: et voici une belle solution https://gist.github.com/cangelis/1442951 p> p>
J'ajouterais certainement un cas par défaut (avec une exception) au commutateur pour protéger contre les typos et les opérandes inconnus. De plus, vous devriez jeter une exception au lieu de faire un écho. Sans exceptions, le code reviendra des résultats indéfinis, entraînant des messages d'erreur PHP et / ou un comportement étrange. En dehors de cela, voir mon autre commentaire pour la suggestion de ChanDresh_cool.
Je ferais quelque chose comme ça de cette façon, vous pouvez facilement ajouter de nouvelles opérations p> et opérations de chaîne comme celle-ci p>
Ma réponse est similaire à celle de Touki. Nous avons tous tous deux vu la grande vidéo de Misko: p
Avez-vous vérifié le script? Vous avez deux choses manquantes sur le premier coup d'œil: noeud de classe code> ne met pas en place la méthode évalue () code> et la valeur de la classe code> n'a pas de méthode < Code> Valeur () Code>, juste une propriété valeur code>. Mais à part cela, c'est bon d'obtenir l'idée de motif! (Y)
Oups, je viens de comprendre que sur PHP> = 5.4 Vous pouvez avoir les méthodes "interfacées" implémentées dans une extension de classe ...
Veuillez prendre une minute pour aligner le code correctement. Il est à peine possible de lire le code quand il est tout gâché.
L'aligna pour vous. :-)
ah désolé, je suppose que nous avons édité en parallèle :)