Instancier un objet

Par moumene23, il y a 11 ans


bonjour tout le monde, à la base je suis un mordu de JAVA, donc j'ai une base 'pas mal' du tous en POO.
j'ai suivie le tuto ayant comme titre :" Tutoriel PHP - Développer un site - jour x....
mon probléme est que, arrivant au 'jour 3':
dans la prortion de code décrivant la fonction "loadModel($name)
dixit:

function loadModel($name){ $file=ROOT.DS.'model'.DS.$name.'.php'; require_once($file); if(!isset($this->$name)){ $this->$name=new $name(); } else{ echo 'pas chargé'; }}

Or en JAVA : $name étant un paramétre de la méthode : loadModel donc une variable donc on ne peut l'instancier ....
$this->$name ="""new $name()""" ???????????

3 réponses

Alexandre #lbac, il y a 11 ans

Et quel est le problème ?

Ch0c4, il y a 11 ans

Je t'explique ce que ça fait cette fonction.
Je pense que tu as compris quelle charge un model dans le controller dans la variable d'instance "$name"
Donc, il regarde si la variable n'existe pas déjà,

if(!isset($this->$name))

si elle existe pas, il instancie la classe et le met dans la variable d'instance qui a pour nom "$name".

$this->$name=new $name();

en gros voila ce qui se passe si $name = 'User'

function loadModel($name){ $name = 'User'; $file=ROOT.DS.'model'.DS.'User'.'.php'; require_once($file); if(!isset($this->User)){ $this->User=new User(); } else{ echo 'pas chargé'; }}

En php il est possible d'instancier une classe dynamiquement.

et dans ce code il serait plus pratique de vérifier si le model existe en faisant un "file_exists" avant de le require

function loadModel($name){ $file=ROOT.DS.'model'.DS.$name.'.php'; if(!file_exists($file)){ return false; } require_once($file); if(!isset($this->$name)){ $this->$name=new $name(); } else{ echo 'pas chargé'; }}
moumene23, il y a 11 ans

c'est un forum assez actif, bravo....je suis nouveau ici...je ne pensé pas vraiment avoir des réponses aussi rapidement....merci à tous
dixit CH0c4:

"En php il est possible d'instancier une classe dynamiquement."

, je vais me penché sur cette phrase qui est peut etre la réponse à ma question, car j'aurais apprécié : " $this->$name = new User() ...suivant votre exemple...mais votre réponse est super bien explicite ...1000 merci