|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Bouchra Inscription : février 2004 Messages : 172 ![]() |
Bonjour,
Comme je commence une autoformation en Programmation orienté objet en PHP. J'ai commencé de créer ma premiere classe : Personnage.class.php Code :
( ! ) Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in C:\wamp\www\POO\Personnage.class.php on line 13 Merci de m'expliquer pourquoi. |
||
|
|
00
|
|
|
#2 | ||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Salut
Regarde ton code, tu fais en gros ceci : Or, une classe doit être constituée/structurée de méthodes de classe, et c'est dans ces méthodes que les traitements devront se faire (c'est toute la différence avec une fonction). Bien qu'au niveau de la syntaxe une méthode est déclarée par le mot function ce n'est tout de même pas une fonction, mais une méthode. Pour exemple, chargerClasse est une méthode de classe (une méthode de la classe Personnage). Il y a une autre erreur concernant l'appel à la fonction spl_autoload_register ('chargerClasse'). Il te faut consulter systématiquement la doc de Php lorsque tu exploites une fonction où tu ne sais pas trop comment l'exploiter. Il y a des explications et bien souvent des exemples de codes. -> spl_autoload_register() Quand on passe juste une chaine (chargerClasse), ceci sous entendra que "chargerClasse" soit une fonction. Or, "chargerClasse" ici n'est pas une fonction mais une méthode de la classe "Personnage". spl_autoload_register() permet de faire référence à une méthode de classe, et permet d'ailleurs 2 façons pour ça. - Si la méthode de classe est statique : Code :
spl_autoload_register ('Personnage::chargerClasse') Code :
spl_autoload_register (array('Personnage', 'chargerClasse')) Un autre problème encore vient du concept. Tu prévois un système d'auto-chargement de classes dans la classe "Personnage" de même que son instanciation. Je ne pense pas que ce soit possible, cela devrait provoquer une erreur de double déclaration. Il te faudrait séparer certaines choses, car le principal but de faire de la POO, c'est de créer des classes où chacune d'entre elles aura une tâche à faire et ne fera que ça (et non des classe genre "fourre tout"). L'auto-chargement de classe est une tâche à part, donc on créera une fonction ou mieux une classe autoload. L'exemple dans la doc est un bon début et répondra très certainement à ce que tu veux. Code :
Même si cela est possible, j'ai plutôt idée que l'instanciation devrait se faire en dehors. Donc d'avoir une classe Personnage puis d'avoir une page (genre personne.php) où on exploitera cette classe. Exemple : (Une page personne.php accessible via une URL comme : http://www.domaine.com/personne.php) Code :
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||||
|
|
00
|
|
|
#3 | ||
![]() ![]() Développeuse PHP/Java Inscription : avril 2007 Messages : 3 671 ![]() |
En dehors des considérations techniques exposées par RunCodePHP (avec justesse
Tu as une classe Personnage, qui correspond, je suppose, à un personnage de jeu vidéo. La classe serait un type de personnage. Est-ce que ce type de personnage rajoute des spécifications en fonction du type ? dans ce cas, il faudrait sans doute envisager de créer des classes héritant de Personnage. Par exemple : Personnage est la classe de base avec des attributs de force et d'expérience, et tu as un type Magicien qui est un Personnage avec les mêmes attributs force et expérience et un attribut "pouvoir magique". Ce qui donne quelque chose du genre : Code :
__________________
Modératrice PHP Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) |
||
|
|
00
|
|
|
#4 | |||||||||||
|
Nouveau Membre du Club
![]() Bouchra Inscription : février 2004 Messages : 172 ![]() |
Merci pour vos interventions, comme je l'ai dis il s'agit d'une autoformation et sur un autre site que j'ai trouvé ce tutoriel bien expliquer en plus avec un TP de pas à pas (avis personnel). Au départ je n'avais pas le probleme cad j'arrive à exécuter le code mais quand j'ai voulu refaire le TP c'est ici ou je me trouve avec l'erreur fatal. Ci-après une partie du document je ne sais pas si je peux vous donner le chemin exacte il s'agit d'un autre site :
Citation:
|
|||||||||||
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Citation:
Si je peux émettre un conseil. Vu que tu débute dans la POO, il serait mieux de mettre de coté l'auto-chargement de classe pour le moment, ça me semble un aspect qui est bon à apprendre bien plus tard. Il est bon de savoir comment charger ces classes de manière classique, c'est à dire en les incluant (require ou include) manuellement/explicitement. Le coté automatique de l'auto-chargement de classe peut être assez déroutant et rendre les chose confuses. Il est préférable de se concentrer d'abord sur la syntaxe propre ou particulière à l'Objet, c'est le BABA, sans cela c'est mission impossible. Puis après les mécanismes propre à l'Objet (visibilité, héritage, etc ...). Et enfin de la conception de ces Objets/Classes. C'est la partie la plus délicate, mais très certainement la plus intéressante (à condition de connaitre les étape 1 et 2). Le plus important est là. Puis c'est bien de se référer à des tutos, mais de mon coté j'ai toujours privilégié un apprentissage dans des bouquins, car ils sont en général mieux construit (bouquins récents/à jours et connus/reconnus). Les tutos ou autre (le Net en général) comme compléments. A l'exception de la doc officielle de Php, c'est à dire : http://www.php.net/ ou http://fr2.php.net/ (et non pas les nombreuses copies voir plagiat du site officiel).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#6 | ||||
|
Nouveau Membre du Club
![]() Bouchra Inscription : février 2004 Messages : 172 ![]() |
Merci beaucoup RunCodePhp pour le conseil et surtout j'ai l'habitude de travailler avec la programmation procédurale avec les bases de données relationnelles. Maintenant je décide de changer (ou évoluer) et de m'orienter vers POO. et j'espere de m'en sortir.
A propos de mon probleme je dirai c'est bon j'ai compris ce que je dois faire, c'est séparé les 2 codes en deux fichiers : Personnage.class.php Code :
Code :
|
||||
|
|
00
|
|
|
#7 | |||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Code :
Mais chargerClasse c'est une fonction, donc un code procédural. Comme tu as pour objectif d'apprendre la POO, je dirais que toute occasion est bonne pour faire Objet. Code :
Citation:
Ce n'est pas totalement obligatoire, mais il est préférable d'adopter ce principe là dû à l'autoloader. Aussi il faut comprendre qu'avec le code qu'il y a dans l'autoloader actuellement, ça recherchera les classes toujours au même endroit (même répertoire). Ceci peut être un frein à l'organisation/structure des classes, et même de l'ensemble du projet, et c'est pour cette raison que j'avais émis quelques réserve sur l'auto-chargement de classes. Une technique (assez courante) serait qu'il soit possible de structurer ces classes comme ceci : root/classes/Core (les classes du coeur de son projet) root/classes/Application (les classes propre à cette application) root/classes/Modules (les classe optionnelles / modulaire, donc selon le besoin/contexte) etc ... Donc faire en sorte que l'autoloader recherche la classe selon le chemin qu'on lui indique. Si on indique : $Machin = new Core_Machin() ça recherchera dans le répertoire "Core". Si on indique : $Truc = new Modules_Truc() ça recherchera dans le répertoire "Modules" etc ... Qui est assez proche (sauf erreur) du principe des NameSpaces (valable qu'à partir de Php 5.3).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com