[RESOLU] PHP - Objet, Classes, constructeurs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] PHP - Objet, Classes, constructeurs

Re: PHP - Objet, Classes, constructeurs

par Galeros » 01 oct. 2019, 17:22

#-o

Pas toujours facile les premieres fois, en tout cas je te remercie !
Bonne continuation et peut être à une prochaine

Re: PHP - Objet, Classes, constructeurs

par Saian » 01 oct. 2019, 17:19

Fallait pas supprimer les setters et modifier le constructeur, fallait juste ajouter les getters. Les 2 sont nécessaires, les setters servent à affecter les valeurs aux propriétés et les getters servent à récupérer les valeurs.
Dans le constructeur tu définis les valeurs donc tu utilises les setters (avec paramètre) et après construit ton objet tu veux afficher les valeurs des propriétés, tu utilises donc les getters (sans paramètre).

Les setters affectent les valeurs dans les propriétés :
public function setName($name) {
  $this->name = $name;
}

Les getters retournent les valeurs des propriétés :
public function getName() {
  return $this->name;
}

Re: PHP - Objet, Classes, constructeurs

par Galeros » 01 oct. 2019, 17:11

Merci beaucoup de cette réponse rapide !!
(et de ce petit rappel qui fait du bien )

Parcontre il ne m'affiche toujours pas les valeurs je ne comprends pas, j'ai modifié comme dans ton exemple, mais rien

Code : Tout sélectionner

<?PHP class Bateau { private $_idBat; private $_nomBat; private $_longueurBat; private $_largeurBat; public function __construct($unId, $unNom, $uneLongueur, $uneLargeur) //Constructeur { $this->getId($unId); //Initialisation de l'Id $this->getNom($unNom); //Initialisation du nom $this->getLongueur($uneLongueur); //Initialisation de la Longueur $this->getLargeur($uneLargeur); //Initialisation de la Largeur } public function getId() //Mutateur qui modifie l'attribut _idBat { return $this->_idBat; } public function getNom() //Mutateur qui modifie l'attribut _nomBat { return $this->_nomBat; } public function getLongueur() //Mutateur qui modifie l'attribut _longueurBat { return $this->_longueurBat; } public function getLargeur() //Mutateur qui modifie l'attribut _largeurBat { return $this->_largeurBat; } } // fin de la Classe Bateau $bateau1 = new Bateau(2,'Batoi',150,47); echo $bateau1->getNom(); echo $bateau1->getId(); echo $bateau1->getLongueur(); echo $bateau1->getLargeur(); ?>

Re: PHP - Objet, Classes, constructeurs

par Saian » 01 oct. 2019, 16:59

Salut, le problème c'est que ta méthode setNom est plutôt un setter qui sert à renseigner la valeur de la propriété _nomBat, elle ne sert pas à récupérer la valeur.
La méthode attend un paramètre $unNom qui est le nom du bateau. Tu as donc évidemment une erreur "pas assez d'arguments pour la fonction Bateau::setNom(), 0 passé ... et exactement 1 attendu ..." lorsque tu appelles la méthode sans paramètre.

Les propriétés étant privée tu devrais faire des getters :
public function getNom()
{
  return $this->_nomBat;
}

Et utiliser le getter pour récupérer le nom :
echo $bateau1->getNom();

PHP - Objet, Classes, constructeurs

par Galeros » 01 oct. 2019, 16:47

Hello !
J'ai une petite question, en espérant qu'une âme charitable pourra y répondre !

Code : Tout sélectionner

<?PHP class Bateau { private $_idBat; private $_nomBat; private $_longueurBat; private $_largeurBat; public function __construct($unId, $unNom, $uneLongueur, $uneLargeur) //Constructeur { $this->setId($unId); //Initialisation de l'Id $this->setNom($unNom); //Initialisation du nom $this->setLongueur($uneLongueur); //Initialisation de la Longueur $this->setLargeur($uneLargeur); //Initialisation de la Largeur } public function setId($unId) //Mutateur qui modifie l'attribut _idBat { $this->_idBat=$unId; } public function setNom($unNom) //Mutateur qui modifie l'attribut _nomBat { $this->_nomBat=$unNom; } public function setLongueur($uneLongueur) //Mutateur qui modifie l'attribut _longueurBat { $this->_longueurBat=$uneLongueur; } public function setLargeur($uneLargeur) //Mutateur qui modifie l'attribut _largeurBat { $this->_largeurBat=$uneLargeur; } } // fin de la Classe Bateau $bateau1 = new Bateau(2,'Batoi',150,47); echo $bateau1->setNom(); ?>
Voici mon code, à la fin de celui-ci, j'essaie de faire un echo du nom de mon bateau 1 mais il me met un message digne d'un film extraterrestre !

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Bateau::setNom(), 0 passed in C:\xampp1\htdocs\test\capitaine.php on line 37 and exactly 1 expected in C:\xampp1\htdocs\test\capitaine.php:21 Stack trace: #0 C:\xampp1\htdocs\test\capitaine.php(37): Bateau->setNom() #1 {main} thrown in C:\xampp1\htdocs\test\capitaine.php on line 21

Il me semble qu'il est possible de faire appel aux caractéristiques de mon bateau, en dehors de ma classe bateau, grace aux fonctions (publiques)..