Bonjour,

Pratiquant le PHP procédural depuis quelques années maintenant, je me suis enfin décidé à me mettre à la POO. Je trouvais jusque là les tutos sur web beaucoup trop compliqué et j'avais envie de quelques chose de nouveau, de mieux expliqué

C'est alors que j'ai découvert la formation vidéo de GrafikArt qui reste une merveille à mes yeux. Ayant quasiment tout compris sur les premiers chapitres, arrivé à l'autoloading, je m'y perds totalement, et ça fait un effet boule de neige après ça, les namespaces c'était pire, j'ai regardé tout jusqu'au backend, et j'ai arrêté me rendant compte que je comprenais pas un traitre mot de ce qui était raconté.

Donc si vous avez des conseils à partir de ça, je suis preneur, parce que créer des classes, des instances, les rendre visible etc.. Je sais faire, mais dés qu'on pousse la chose plus loin, terminé, je décroche.

J'ai le site du association à faire, je l'aurai programmer en procédural, mais comme il risque d'être repris un jour, je me suis dis que ça faisait plus professionnel d'utiliser de la POO (et ça me donnait une raison de m'y mettre enfin).

Pour ce qui de ma mini incompréhension sur l'autoloading, je comprends pas juste cette partie là :

    spl_autoload_register(array(__CLASS__, 'autoload'));

Si j'ai bien compris, il faut passé par argument le nom de la fonction d'autoload, mais le array pourquoi il est là ??

Comment il sait que autoload se trouve dans __CLASS__ .
Techniquement array(__CLASS__,'autoload');
Retourne un truc comme :

Array
{
     [0] => __CLASS__
     [1] => autoload
}

'Fin, j'ai du mal à comprendre le passage d'un array en argument dans ce cas là ^^'

J'espère avoir été compris, et merci de m'avoir lu et de prendre le temps de me répondre :)

6 réponses


Genki
Auteur

Bah justement c'est pas clair, je sais que __CLASS__ renvoit le nom de la classe, et que autoload c'est le nom de la fonction que doit appeler spl_autoload_register
Ce que je comprend pas c'est à quoi sert l'array dans ce cas là. Techniquement je sais que l'array sert à dire que autoload se trouve dans CLASS

Mais comment spl_autoload_register interprête cet array ? Qu'est ce qui se passe au niveau du code lors de l'execution de cette fonction ?

Edit : Donc en gros, il y a non pas 1 mais 2 arguments qui passe dans la fonction ? Pour moi l'array n'en est qu'un c'est pour ça que je bloque

Bonjour.
CLASS correspond au nom de la classe du fichier dans lequel se trouve la fonction spl_autoload_register, dans le tutoriel, la classe se nomme Autoloader.

Genki
Auteur

Arf je pense que je me fais mal comprendre ^^'
J'ai pas de problème pour spl_autoload_register, mais un problème pour l'array, je comprends pas ce qu'il fait là et comment spl_autoload_register l'utilise comme paramètre

J'suis sans aucun doute pas le mieux placé pour répondre mais vu que j'essaye difficilement de me mettre à la POO, voici ce que j'comprends :

C'est juste que dans le cas ou on utilise spl_autoload_register avec une class on doit lui spécifier un tableau comme argument pour justement lui préciser dans quelle classe se trouve la méthode que l'on doit appeller. Etant donné que la methode qui gère l'autoload se situe dans la classe Autoloader c'est juste la façon de dire à spl_autoload_register que pour chopper la bonne fonction il doit d'abord avoir le nom de la classe dans l'index 0 du tableau et la méthode dans l'index 1. C'est pas précisé dans la doc visiblement mais dans les commentaires c'est plutot clair.

Quand la fonction d'autoload est situé dans une classe on passe à spl_autoload_register un tableau un parametre ou la premiere valeur sera la classe ou se trouve la méthode et en seconde valeur la méthode de cette classe à appeller :D.

Je suis pas sûr d'être très clair, ni de répondre à la question mais l'important c'est de participer ;).

Hey !

La fonction spl_autoload_register attend un type callable, ça fonctionne sur le même principe que call_user_func.
A l'intérieur de la fonction, php transforme le tableau " array(CLASS, 'autoload') " en callback. Tu pourrais y préciser le nom d'une fonction normal ou une fonction anonyme que ça fonctionnerait pareil. C'est juste que pour préciser la méthode d'une classe il faut utiliser un tableau avec les deux valeurs.
Si ta méthode est static tu peux aussi faire TaClasse::TaMethode, php considérant ça toujours comme étant un callback.

En espérant avoir éclairer ta lanterne. :-)

Je ne comprends pas ce que tu n'arrives pas à appréhender ? Passer un array comme paramètre d'une fonction ets quelque chose de courant et même vital si la fonction dépend de beaucoup de params.
La fonction spl_autoload_register va parser le tableau et récupérer les infos dont elle a besoin pour mener à bien son execution.