Merci =)Tiens : de quoi commencer pour avoir une première idée
<?php
class calculette
{
private $chiffre1;
private $chiffre2;
//private $resultat;
public function __construct($c1, $c2)
{
$this->chiffre1 = $c1;
$this->chiffre2 = $c2;
$this->resultat = NULL;
}
public function addition()
{
$resultat = $this->chiffre1 + $this->chiffre2;
}
public function AfficherResultat()
{
return ($this->$resultat);
}
}
?>
<?php
$premier = 292;
$second = 4567;
/* Création de l'objet en utilisant "new" */
$operation = new calculette($premier, $second);
/* On va maintenant récupérer la somme en appelant la méthode de classe addition */
$total = $operation->addition();
/* On affiche le résultat */
echo("<p>La somme de ". $premier ." + ". $second ." est égale à ". $total ."</p>\n");
?>
[/php]
On pourait effectivement vouloir conserver le résultat, toute bonne calculette propose les fonctions M+/M- justement destiné à celaDonc, première question, es-ce-que mon raisonnement est juste ? Utile, ça c'est autre chose, car après tout si on calcul c'est pour avoir une réponse. Mais bon on pourrais imaginer vouloir garder la réponse pour l'afficher plus tard... Je sais pas ?
public function addition()
{
$resultat = $this->chiffre1 + $this->chiffre2;
} Tu stockes ici le total de l'addition dans une nouvelle variable $resultat et non dans la variable memebre de l'objet (en gros il manque quelque chose pour dire à php qu'il s'agit de l'attribut de l'objet instancié et non d'une nouvelle variable Ta méthode addition() ne retournant plus de valeur, il est inutile de récupérer son résultat dans ta variable $total. En revanche, tu as maintenant dans ton objet une méthode qui te retourne ce résultat. Il te suffit donc d'y faire appel (et éventuellement de stocker le résultat dans $total) après avoir fait l'addition pour qu'elle te retourne la valeur attendueDeuxième question : Comment je fait pour afficher le résultat maintenant ? Je suis perdu là![]()
Y a pas vraiment d'obligation, c'est une question de visibilité.Troisième question : $resultat doit t-il être déclaré private ? Je suis pas sur, peut être parce que j'ai pas bien saisi ce point...
hum... peut être que c'ets çia qu'il manque ? :Donc ton raisonnement est juste à un petit détail près :Tu stockes ici le total de l'addition dans une nouvelle variable $resultat et non dans la variable memebre de l'objet (en gros il manque quelque chose pour dire à php qu'il s'agit de l'attribut de l'objet instancié et non d'une nouvelle variablepublic function addition() { $resultat = $this->chiffre1 + $this->chiffre2; })
$resultat = NULL;
$operation = new calculette($premier, $second, $resultat);
Et pour afficher, c'ets peut être simplement ça ?
$total = $operation->addition();
$resultat = $operation->Afficherresultat();
J'ai pas essayé je suis encore au petit dej <?php
class calculette
{
private $chiffre1;
private $chiffre2;
private $resultat;
public function __construct($c1, $c2)
{
$this->chiffre1 = $c1;
$this->chiffre2 = $c2;
$this->resultat = 0;
}
public function addition()
{
$this->resultat = $this->chiffre1 + $this->chiffre2;
}
public function AfficherResultat()
{
return ($this->$resultat);
}
}
?>
<?php
$premier = 292;
$second = 4567;
/* Création de l'objet en utilisant "new" */
$operation = new calculette($premier, $second);
/* On va maintenant faire la somme en appelant la méthode de classe addition */
$operation->addition();
$total = $operation->AfficherResultat();
/* On affiche le résultat */
echo("<p>La somme de ". $premier ." + ". $second ." est égale à ". $total ."</p>\n");
?>
Dans la méthode AfficherResultat(), on récupère la valeur de la propriété $resultat : pour que ça marche, on modifie un petit peu la manière de faire dans la méthode addition() : mais ça veut dire que $resultat est une propriété de l'instance, il faut donc la traiter comme telle.Merci Cyrano pour ta réponse, mais... tu vas certainement me trouver obtus et/ou pénible, mais j'ai encore du mal à comprendre le vrai intérêt de la chose...@FredoMkb :
Lorsque tu crée une instance de classe, cette instance a ses propriétés et ses méthode. Une instance parallèle aura les mêmes propriétés et les mêmes méthodes, mais chaque instance aura pour les propriétés des valeurs distinctes qui lui sont propres. Tu as effectivement les mêmes méthodes, mais elles seront appelées différemment selon le besoin de l'une ou l'autre instance que tu manipules. En procédural, il te faudrait utiliser des variables dynamiques ce qui est beaucoup moins pratique.
<?php
$premier = 292;
$second = 4567;
/* Création de l'objet en utilisant "new" */
$operation = new calculette($premier, $second);
/* On va maintenant faire la somme en appelant la méthode de classe addition */
$operation->addition();
$total = $operation->AfficherResultat();
/* On affiche le résultat */
echo("<p>La somme de ". $premier ." + ". $second ." est égale à ". $total ."</p>\n");
?>
Je pourrait tout autant faire cela avec une simple fonction :<<?php
$premier = 292;
$second = 4567;
// Calcul du total avec la fonction 'addition()'
$total = addition($premier, $second);
/* On affiche le résultat */
echo("<p>La somme de ". $premier ." + ". $second ." est égale à ". $total ."</p>\n");
?>
Beaucoup moins de code, et un résultat en tout point identique (pour cet exemple en tout cas)...<?php
class calculette
{
private $chiffre1;
private $chiffre2;
private $resultat;
public function __construct($c1, $c2)
{
$this->chiffre1 = $c1;
$this->chiffre2 = $c2;
$this->resultat = 0;
}
public function addition()
{
$this->resultat = $this->chiffre1 + $this->chiffre2;
}
public function AfficherResultat()
{
return ($this->resultat);
}
}
?>
<?php
if ( isset( $_POST['c1'] ) )
{
$premier = $_POST['c1'];
$second = $_POST['c2'];
/* Création de l'objet en utilisant "new" */
$operation = new calculette($premier, $second);
/* On va maintenant faire la somme en appelant la méthode de classe addition */
switch( $_POST['type'] )
{
case '+' :
$operation->addition();
break;
case '-' :
$operation->soustraction();
}
$total = $operation->AfficherResultat();
/* On affiche le résultat */
echo("<p>La somme de ". $premier ." + ". $second ." est égale à ". $total ."</p>\n");
}
?>
<form method="post" action="objet3.php">
<input type="text" name="c1" />
<select name="type">
<option value="+">+</option>
<option value="-">-</option>
</select>
<input type="text" name="c2" />
<input type="submit" />
</form>
Code : Tout sélectionner
<?php
class ChampFormulaire
{
private $NomLabel;
private $NomChamp;
private $Maxlenght;
private $resultat;
public function __construct( $v1, $v2, $v3 )
{
$this -> NomLabel = $v1;
$this -> NomChamp = $v2;
$this -> Maxlenght = $v3;
$this -> resultat = NULL;
}
public function ChampTexte()
{
return( $this -> resultat = '<label>'.$this -> NomLabel.'</label>
<input type="text" name="'.$this -> NomChamp.'" maxlenght="'.$this -> Maxlenght.'" />' );
}
}
?>
<?php
$Champ1 = new ChampFormulaire( 'nom du label', 'nom du champ', '55' );
$Champ1 = $Champ1 -> ChampTexte();
echo $Champ1;
?>Oki bon ben alors je vais rester dans les formulaires mais cette fois coté vérification.Là, je dois dire que tu t'attaques à forte partie. Construire une classe de génération de formulaire est un problème ardu et beaucoup s'y sont cassé les dents avant d'arriver à un système satisfaisant, je parle par expérience personnelle et je ne suis pas le seul dans ce cas ici.
Je te recommande quelque chose de moins complexe : une connexion à un serveur de base de données par exemple avec des méthodes pour exécuter une requête et en récupérer le retour. Ça va te donner de la matière pour te faire la main.
<?php
class VerifFormulaire
{
private $donnees;
public function __construct( $donnees )
{
$this -> donnees = $_POST;
$this -> NbChampsVides = 0;
$this -> cle = NULL;
$this -> valeur = NULL;
$this -> ErreursForm = NULL;
}
public function ChampVides()
{
foreach( $this -> donnees as $this -> cle => $this -> valeur )
{
if ( $this -> valeur == NULL )
{
$this -> NbChampsVides++;
}
}
}
public function AfficherErreurs()
{
if ( $this -> NbChampsVides != 0 )
{
$this -> ErreursForm .= $this -> NbChampsVides.' champ(s) vide(s)';
}
return $this -> ErreursForm;
}
}
?>
<?php
if ( isset( $_POST['Champ1'] ) )
{
$VerifForm = new VerifFormulaire( $_POST );
$VerifForm -> ChampVides();
$ErreursForm = $VerifForm -> AfficherErreurs();
echo $ErreursForm;
}
?>
<form method="post" action="form2.php">
<input type="text" name="Champ1" />
<input type="text" name="Champ2" />
<input type="submit" />
</form>