POO

Messages postés
15
Date d'inscription
vendredi 27 novembre 2009
Dernière intervention
7 décembre 2016
-
Bonjour,
je suis un débitant en programmation orienté objet avec PHP je fais un exercice qui me complique un peu si quelqu'un a l'idée peut m'aider s'il vous plait. Voilà le codes ci-dessous :
page : classe3.php
<?php
class client{
 private $prenom;
 private $nom;
 private $age;
  public function getPrenom() {
  return $this−>prenom;
  }
  public function getNom() {
  return $this−>nom;
  }
  public function getAge() {
  return $this−>age;
  }
  public function setPrenom($prenom){
   if (!preg_match("/^\s*(.+?)\s*$/", $prenom, $champs)) {
    throw new Exception("Le prénom doit être non vide");
    } else {
     $this->prenom = $champs[1];
     }
  }
  public function setNom($nom){
    if (!preg_match("/^\s*(.+?)\s*$/", $nom, $champs)) {
    throw new Exception("Le nom doit être non vide");
    } else {
     $this->nom = $champs[1];
     }
  }
  public function setAge($age){
    if (!preg_match("/^\s*(\d+)\s*$/", $age, $champs)) {
    throw new Exception("L'âge doit être un entier positif ou nul");
    } else {
     $this->age = $champs[1];
     }
  }
 function __construct($prenom, $nom, $age){
   $this−>setPrenom($prenom);
   $this−>setNom($nom);
   $this−>setAge($age);
  }
  public function toHTML() {
  return $this−>prenom  . " \n " . $this−>nom  . " \n  " .  $this−>age  ;
  }

}
 ?> 

page : index.php
<?PHP 
include("classe3.php");
$merci=new client("CHICCO", "BETUKUTALA", 30);
echo $merci->toHTML() ; 
  try {
   $merci=new client("xxxxx", "yyyyyyy", "gg");
    } catch (Exception $e) {
     print $e->getMessage();
    }
    //fin
 exit();  

?>
NB: mon problème est que lors de l'exécution y a une erreur au niveau de mon constructeur.
Fatal error: Call to undefined function setPrenom() in D:\Chicco\exercices\classe3.php on line 52

la ligne 52 c'est la ligne par laquelle j'ai fait la construction donc il arrete ici :
 function __construct($prenom, $nom, $age){
   $this−>setPrenom($prenom);
   $this−>setNom($nom);
   $this−>setAge($age);
  }
Afficher la suite 

Votre réponse

2 réponses

Messages postés
23628
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
0
Merci
Bonjour,

Du coup tu ne peux pas faire des appels de fonction propre a la classe (comme des getteurs ou setteurs par exemples), à l'interieur de celle-ci car ces dernieres ne sont pas encore initialisées.

C'est nouveau ça ?

Deux interventions de ta part ... deux énormes erreurs .... Merci de faire attention à tes réponses pour ne pas induire les utilisateurs en erreur.

Pour preuve :
class maclass{

	private $atr1,$atr2,$atr3;

	function __construct($var1,$var2,$var3=""){
	  $this->setAtr1($var1);
	  $this->setAtr2($var2);
	  $this->setAtr3($var3);

	}

	public function setAtr1($var){
	 $this->atr1 = $var;
	}

	public function setAtr2($var){
	 $this->atr2 = $var;
	}
	public function setAtr3($var){
	 $this->atr3 = $var;
	}

	public function getAtr(){
	 return array($this->atr1,$this->atr2,$this->atr3);
	}

}

Et pour l'utiliser :
<?php
error_reporting(E_ALL);
ini_set('display-errors','on');

require_once "maclass.php";

$obj = new maclass("aa","Bb","CC");

print_r($obj->getAtr());

Le code ci-dessus fonctionne parfaitement.


Et pour ce qui est du code du demandeur .. aucun souci non plus avec celui-ci.
La seule remarque éventuelle.. serait qu'il est préférable de nommer le fichier qui contient la class avec le même nom que celui utilisé pour la class (pratique pour les auto_loader par exemple )
Commenter la réponse de jordane45
Messages postés
6
Date d'inscription
mercredi 4 janvier 2017
Dernière intervention
8 janvier 2017
-1
Merci
Les classes qui possèdent une méthode constructeur appellent cette méthode à chaque création d'une nouvelle instance de l'objet, ce qui initialise donc l'objet avant d'être utilisé. Elle est donc la première a s'executer lorsqu'on instancie un objet. Du coup tu ne peux pas faire des appels de fonction propre a la classe (comme des getteurs ou setteurs par exemples), à l'interieur de celle-ci car ces dernieres ne sont pas encore initialisées.
tu dois donc faire :

     function __construct($prenom, $nom, $age){
         $this−>prenom = $prenom;
         $this−>nom = $nom;
         $this−>age = $age;
      }
Commenter la réponse de Sph1nxDev

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.