CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] Objet par prototype

vava740
vava740
Niveau 10
08 mars 2013 à 11:17:16

Bonjour,

L'idée d'objet par prototype me plaît bien en JavaScript et je me suis penché sur la reproduction d'un prototype en PHP.

Néanmoins même si cette façon d'aborder l'objet a des avantages, on perd beaucoup des avantages l'objet en PHP (propriétés et méthodes privées ou protégées, classes abstraites, finales, interfaces, et tout ce qui reste possible devient largement moins strict et donc potentiellement moins bien structuré).

Par contre l'utilisation d'un prototype peut permettre d'ajouter à la volée des fonctions sur une classe particulière, ou même de modifier une méthode existante sur une classe, ça rend les objets beaucoup plus modulaires et c'est un concept qui m'intéresse.

Voici un exemple basique de prototype en PHP : http://wall.deblan.fr/x1721/php/1/

Que pensez-vous de cette façon d'aborder l'objet ? Est-ce viable de l'utiliser en PHP ?

deepblue
deepblue
Niveau 16
08 mars 2013 à 11:51:14

Le concept ne me plaît pas du tout. Cependant, en jouant le jeu, je développerait ça autrement : http://wall.deblan.fr/x1722/php/1/

deepblue
deepblue
Niveau 16
08 mars 2013 à 12:11:50

Note que l'héritage fonctionne bien : http://wall.deblan.fr/x1723/php/1/ (j'en ai profité pour refactorer __call)

vava740
vava740
Niveau 10
08 mars 2013 à 14:45:09

Qu'est-ce qui ne te plaît pas dans le concept, plus précisément ?

Pour ton exemple il y a quelques limites dans l'héritage...

http://wall.deblan.fr/x1724/php/1/

Le dernier setNewFoo (appelé sur Example) utilise la version qui a été modifiée sur SubExample)... une classe fille qui modifie le prototype de la classe mère, je suis pas sûr que ce soit le comportement désiré, enfin pas dans ma logique en tout cas.

Mais oui en passant pas des fonctions pour définir le prototype ça me semble moins permissif, mais dans mon example (du premier post) j'ai préféré coller au maximum à la syntaxe du JS.

Petite question concernant les exceptions, personnellement je préfères ne pas en lancer (sauf exception :noel: ) et laisser se propager les exceptions natives (quitte à devoir descendre un peu dans la backtrace pour trouver la source réelle du problème). Tu as pas l'air de raisonner de la même façon, les exceptions ont d'autres avantages que la simplification du debug ?

vava740
vava740
Niveau 10
08 mars 2013 à 14:51:00

Remarque dans ma version aussi y'a le même problème quand on modifie une classe fille, faudrait rajouter un clone mais à ce moment là quand on modifie le proto d'une classe mère par la suite, les classes filles suivent pas... après faudrait faire un __proto__ et aller chercher récursivement dedans.

deepblue
deepblue
Niveau 16
08 mars 2013 à 15:55:48

"Qu'est-ce qui ne te plaît pas dans le concept, plus précisément ?" :d) (sans prétention)
- je ne me suis jamais dis qu'un tel truc pourrait m'être utile et je ne l'ai jamais croisé dans les moultes projets où j'ai mis le nez dedans
- d'un point de vue conception, je trouve ça mauvais : je connais les méthodes d'un objet si je dois en ajouter/surcharger, je fais de l'héritage (ou j'utilise un mécanisme proche)

"ne classe fille qui modifie le prototype de la classe mère, je suis pas sûr que ce soit le comportement désiré" :d) c'est clair que ça pue ^^

vava740
vava740
Niveau 10
08 mars 2013 à 17:27:43

J'ai essayé d'arrangé le problème sur ma version, il faut en fait redéclarer le static $prototype sur chaque classe fille.

Et je me suis amusé à faire un __proto__ pour remonter récursivement dans le prototype des classes mères et ça a l'air de marcher correctement, par contre faut y aller à coups de get_class($self) pour conserver le polymorphisme, mais ça me plaît bien dans l'ensemble.

http://wall.deblan.fr/x1726/php/1/

En tout cas merci deepblue d'avoir répondu. :)

D'autres personnes pour me donner leur avis ?

deepblue
deepblue
Niveau 16
09 mars 2013 à 01:07:18

Et pour répondre sur les exceptions, ça permet simple de gérer les erreurs correctement (au sens : les maitriser et réagir en fonction d'elles).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment