alvincyte
Messages postés15Date d'inscriptionvendredi 27 novembre 2009StatutMembreDernière intervention 7 décembre 2016
-
Modifié par @karamel le 7/12/2016 à 13:22
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024
-
8 janv. 2017 à 00:59
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);
}
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024344 8 janv. 2017 à 00:59
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 )
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 :