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


Ch0c4
Réponse acceptée

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é';
    }}

Et quel est le problème ?

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