JeuWeb - Crée ton jeu par navigateur
[PHP] __autoload les classes mère (extends) ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] __autoload les classes mère (extends) ? (/showthread.php?tid=6493)

Pages : 1 2 3


RE: [PHP] __autoload les classes mère (extends) ? - Akira777 - 09-11-2012

Euh... c'est pas pour ça qu'on a inventé le parent::construct() ?

Enfin, si j'ai bien compris que tu as une classe Moto qui hérite de Véhicule et que tu veux l'autoloader.


RE: [PHP] __autoload les classes mère (extends) ? - Plume - 09-11-2012

Je sais pas ce qu'il te faut. Une classe mère est avant tout une classe. Que fait __autoload() ?

Citation :Attempt to load undefined class



RE: [PHP] __autoload les classes mère (extends) ? - Ter Rowan - 09-11-2012

c est vrai que là tu te poses une question bizarre :

"new toto"

il ne connait pas toto ==> autoload de toto

"toto extends tata"

il ne connait pas tata ==> autoload de tata


m'enfin moi j'aime pas les autoload, je charge toutes mes classes :p


RE: [PHP] __autoload les classes mère (extends) ? - Akira777 - 09-11-2012

M'enfin, quand t'en as plusieurs centaines, c'est chaud...


RE: [PHP] __autoload les classes mère (extends) ? - Sephi-Chan - 09-11-2012

(09-11-2012, 07:26 PM)Ter Rowan a écrit : m'enfin moi j'aime pas les autoload, je charge toutes mes classes :p

Je ne comprends pas. Comment ne pas aimer l'autoload ?
Charger les classes selon les besoins est à la fois plus pratique et plus efficace.


RE: [PHP] __autoload les classes mère (extends) ? - Xenos - 09-11-2012

Pour ma part, le système du "chaque fichier php ne contient qu'une seule classe" (parfois 1 classe + ses constantes/enums si besoin, mais cela revient à n'avoir qu'une seule classe) me suffit. Si un autre fichier .php a besoin de cette classe, le php nécessiteux fait un require_once du fichier php contenant cette classe, et il ne charge ainsi que les classes dont il a effectivement besoin.
Cela fait peut-être quelques foisonnement d'includes de ci de là, mais au final, je trouve cela beaucoup plus propre et beaucoup plus clair que le fait de masquer des opérations d'include avec autoload.

Un système que je validerai serait plutôt basé sur la précompilation des php: un automate parcourt les fichiers *.php, regarde les classes utilisées, va chercher les noms des *.php contenant les définition de ces classes et insère les include en tête des fichiers php nécessiteux, à l'image de ce que fait Eclipse quand on essaie d'utiliser une classe Java qui n'a pas été importée (Eclipse propose "Ajouter '@import java.nom_de_classe' au fichier courant", là, l'idée serait la même, mais de manière automatique, sans demander au programmeur PHP)


RE: [PHP] __autoload les classes mère (extends) ? - Plume - 09-11-2012

Archaïque mais vous faîtes comme il vous plait. Juste essayez de tenir des discours cohérents.


RE: [PHP] __autoload les classes mère (extends) ? - Argorate - 10-11-2012

Xenos:

ne pas utiliser l'autoload n'a que des désavantage...

- possibilité d'oublié un require_once quelque part
- ajout de ligne dans plein de fichier (si un jour le nom où le chemin change, tu dois donc le changer partout)
- perte de temps à penser de le mettre, à le vérifier en cas de bug (alors qu'avec l'autoload tu sais que ça ne peux pas venir de là apriori), et perte de temps à le taper ou copier
- test inutile (sans doute une broutille vous me direz, mais comme d'hab, c'est la somme de broutille qui devient importante donc autant s'en passé quand on peut), puisque tu vas faire un require_once pour être sur d'inclure qu'une fois, mais ça signifie qu'en dessous, PHP fait le test pour toi de savoir si le fichier est déjà inclue ou pas, à chaque fois que tu places ton require_once...

Je ne vois pas le moindre avantage^^


Ter Rowan: mon doute venez de:

tu fais new Toto() => PHP détecte une class Toto appelé, mais si dans le code je n'instancie jamais d'objet new Ruby() (dont Toto Extends), ça veux dire que PHP n'a jamais explicitement une demande de charger la class Ruby.

Donc je voulais être sur que même si je instancie jamais aucun objet avec une classe, si j’instancie une classe fille, cela fera forcement le lien?

Voilà, c'était ça la question Wink


RE: [PHP] __autoload les classes mère (extends) ? - Ter Rowan - 10-11-2012

(09-11-2012, 09:41 PM)Sephi-Chan a écrit :
(09-11-2012, 07:26 PM)Ter Rowan a écrit : m'enfin moi j'aime pas les autoload, je charge toutes mes classes :p

Je ne comprends pas. Comment ne pas aimer l'autoload ?
Charger les classes selon les besoins est à la fois plus pratique et plus efficace.

Je fonctionne (comme probablement bcp de monde) avec des répertoires
Du coup l autoload ne se résume pas a incluse "mesClasses/".$nomClasse

A partir de la je ne vois que deux solutions pour l autoload:
Avoir une matrice exhaustive qui lie classeCherchee a repertoireClasseRecherchee (probablement la meilleure mais ça bouffe de la mémoire ?)
Nommer ses classes avec tout le chemin, mais dans ce cas la, on se retrouve a écrire des noms de classes d une longueur effarante.


De fait je suis comme Xenos la dessus


RE: [PHP] __autoload les classes mère (extends) ? - Myrina - 10-11-2012

(10-11-2012, 09:47 AM)Ter Rowan a écrit :
(09-11-2012, 09:41 PM)Sephi-Chan a écrit :
(09-11-2012, 07:26 PM)Ter Rowan a écrit : m'enfin moi j'aime pas les autoload, je charge toutes mes classes :p

Je ne comprends pas. Comment ne pas aimer l'autoload ?
Charger les classes selon les besoins est à la fois plus pratique et plus efficace.

Je fonctionne (comme probablement bcp de monde) avec des répertoires
Du coup l autoload ne se résume pas a incluse "mesClasses/".$nomClasse

A partir de la je ne vois que deux solutions pour l autoload:
Avoir une matrice exhaustive qui lie classeCherchee a repertoireClasseRecherchee (probablement la meilleure mais ça bouffe de la mémoire ?)
Nommer ses classes avec tout le chemin, mais dans ce cas la, on se retrouve a écrire des noms de classes d une longueur effarante.


De fait je suis comme Xenos la dessus
Il y a une solution intermédiaire pour l'autoload:
J'utilise une matrice dynamique car en cache.
Si la classe est dans la matrice, je charge le fichier correspond; si la classe ou le fichier n'est pas trouvé, je supprime l’occurrence de la matrice.
Si la classe n'est toujours pas présente, je parcours récursivement les répertoires pouvant contenir les classes jusqu'à ce que je la trouve puis je la stocke dans la matrice. La recherche se limite au nom du fichier car j'ai imposé une corrélation forte entre le nom de la classe et le nom du fichier.
Pour la gestion mémoire, le fichier de stockage de la matrice en JSON fait environ 100o par classe (ex:111 classes <=> 10560 octets)