Classes et interfaces

Répondre
Isaac
le 13/02/2005 à 19:30
Isaac
Salut !

Pour une fois, j'ai créé un Script entierement seul ! Mais, comme on pouvait s'y attendre, ça foire... smiley Il est constitué d'une interface et de quatre classes qui l'implémentent.

Je reçois ceci comme erreur :
Parse error: syntax error, unexpected '[', expecting ')' in M:\_web.zmwsc\cours\calculsimple.php on line 11


Et le petit script qui va avec smiley :
<?php
Interface operation {
Function effectue ();
}
Class Addition implements Operation {
Function __operation ($nb[1], $nb[2]) {
Protected $reponse = $this -> $nb[1] + $this -> $nb[2];// ligne 11
}
Function effectue () {
echo '<p>Vous effectuez une '.get_parent_class().' :</p>';
echo $this -> reponse;
}
}
Class Soustraction implements Operation {
Function __operation ($nb[1], $nb[2]) {
Protected $reponse = $this -> $nb[1] - $this -> $nb[2];
}
Function effectue () {
echo '<p>Vous effectuez une '.get_parent_class().' :</p>';
echo $this -> reponse;
}
}
Class Multiplication implements Operation {
Function __operation ($nb[1], $nb[2]) {
Protected $reponse = $this -> $nb[1] * $this -> $nb[2];
}
Function effectue () {
echo '<p>Vous effectuez une '.get_parent_class().' :</p>';
echo $this -> reponse;
}
}
Class Division implements Operation {
Function __operation ($nb[1], $nb[2]) {
Protected $reponse = $this -> $nb[1] / $this -> $nb[2];
}
Function effectue () {
echo '<p>Vous effectuez une '.get_parent_class().' :</p>';
echo $this -> reponse;
}
}
echo '<html><body><h6>Calculs simples</h6>';
$ajoute = new Addition (15, 5);
$soustrait = new Soustraction (15, 5);
$multiplie = new Multiplication (15, 5);
$divise = new Division (15, 5);
echo '</body></html>';
?>


J'espère au moins que c'est une véritable errzeur et pas une distraction stupide ... smiley

Voili voilà ! Merci et ++ smiley
http://www.zmws.com
Lefounard
le 13/02/2005 à 19:54
Lefounard
tu as oubluier un } pour fermer interface !
Ciao,
I am singing in the rain , I am happy again !!
Isaac
le 13/02/2005 à 19:55
Isaac
Tu as du mal regardé ! J'oivre un { et je le referme deux lignes plus bas ! Je crois pas que ce soit l'erreur !
http://www.zmws.com
keitarosan
le 13/02/2005 à 21:38
keitarosan
Function __operation ($nb[1], $nb[2])

ton erreur bien de la, car je ne pense pas que tu puisse recupérer les valeurs des parametre dans un tableau.

Enfin tu peux passer un tableau en parametre, mais pas recuperer comme tu le fait...

a mon avis, si tu mets:
Function __operation ($nb1, $nb2)
ca fonctionneras mieux ;)
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
bibi
le 13/02/2005 à 22:49
bibi
yes totalement dacord ave keitarosan, c'est la chose qui m'a choqué quand j'ai vu ca .

et sinon,c'est quoi une interface ? :D
commit suicide
bibi
le 13/02/2005 à 22:52
bibi
de plus, tu peux pas les récupérer avec $this-> , car $this->nb , par exemple, faire appel a la variable nb de la classe or la ce sont des variables passés en parametres d'une fonction donc $nb suffit
commit suicide
bibi
le 13/02/2005 à 22:54
bibi
encore une remarque

get_parent_class() recois obligatoirement un parametre

tu dois mettre : get_parent_class($this)

voila :) dsl pr le flood
commit suicide
Lefounard
le 14/02/2005 à 00:00
Lefounard
Slt,
Perso je vois pas l'interet de cette class car j'y comprends rien lol (implement ca doit etre du php5 mais bon va pas trop vite car on est encore au 4.3 avec free ;))!
Pourkoi a trente six mille , une seule aurait suffit apres ct a toi de foutre toutes les methodes !
Ciao,
I am singing in the rain , I am happy again !!
LA GLOBULE
le 14/02/2005 à 00:25
LA GLOBULE
Lefounard, pourquoi tu t'enflammes ?

Le code est tellement basique que c'est évident qu'Isaac travail ce code seulement à titre d'exercice (sur la POO).

Enfin, j'imagine smiley
keitarosan
le 14/02/2005 à 00:35
keitarosan
Voila, pour faire propre, on va dire faire comme ca:

<?php
// ***** Attention *****
// c'est du PHP 5;
// *********************

//L'interface ne sert a rien a part
//garantir que l'on a bien définie toutes
//les methodes dans sa classe.


//class Operation
Class Operation
{
//déclaration des variables membres...
protected $reponse;
protected $operation;

//constructeur...
Public Function __construct()
{
$reponse = 0;
$operation = "";
}

Public function Addition($nb1, $nb2)
{
$this->reponse = $nb1 + $nb2;
$this->operation = "addition";
$this->Affiche();
}

Public function Soustraction($nb1, $nb2)
{
$this->reponse = $nb1 - $nb2;
$this->operation = "soustraction";
$this->Affiche();
}

Public function Multiplication($nb1, $nb2)
{
$this->reponse = $nb1 * $nb2;
$this->operation = "multiplication";
$this->Affiche();
}

Public function Division($nb1, $nb2)
{
$this->reponse = $nb1 / $nb2;
$this->operation = "division";
$this->Affiche();
}

Private function Affiche ()
{
echo ("
<p>Vous effectuez une $this->operation :</p>
$this->reponse");
}
}
echo '<html><body><h6>Calculs simples</h6>';
$calcul = new Operation();
$calcul->Addition (15, 5);
$calcul->Soustraction (15, 5);
$calcul->Multiplication (15, 5);
$calcul->Division (15, 5);
echo '</body></html>';

?>


Voila, je pense que c'est quand meme plus propre ;)

Ca ne sert pas a grand chose de faire plein de petites classes surtout pour faire une methode par classes, plus une qui peut etre commune a toutes.

En plus, je sais pas ou t'a choppé ca, mais il y avait pas mal d'erreur.
A mon avis, fait bien attention, parce que c'est du PHP5, d'une part, et d'autre part, tu n'as pas de bonnes bases pour faire de l'objet (donc des classes).

Donc essaye de commencer simplement par trouver de bon tutoriaux :)
J'ai pas regarder ici si c'etait bien.
Sinon sur www.nexen.net, tu fais une recherche sur "class", tu trouveras une doc assez bien expliquée.

Et pense a donner un nom bien explicite a tes methode. Effectue() est moins parlant que affiche, car dans ton code, le calcul ne s'effectue pas dans la methode effectue(), mais dans les autres...

Vala vala

KeitaroSan
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
Répondre
LoadingChargement en cours