Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/04/2011, 14h09   #1
Invité régulier
 
Inscription : juillet 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 30
Points : 9
Points : 9
Par défaut Fonctionnement de require_once

Bonjour, j'aimerais avoir des précisions à propos du fonctionnement de require_once si ce n'est pas trop abusé. ^^
J'avoue avoir beaucoup de mal à comprendre.
Tous mes fichiers de classes php sont dans le même dossier, et j'exécute un script php qui se trouve également dans ce dossier.
Chaque classe utilise un ...
Code :
require_once 'Classe.php';
... pour les classes qu'elle utilise ou celle qu'elle étend.
Et malgré celà j'ai toujours ce genre d'erreur...
Code :
Fatal error: Class 'UneCLasse' not found in File.php on line X
... sur la ligne de la déclaration de la classe (juste en dessous l'inclusion donc).

Un autre truc bizarre est que si dans une classe j'importe une classe qui étend la première j'aurais dans la seconde cette erreur, ce qui fait qu'en enlevant l'inclusion de la seconde dans la première je résoud l'erreur dans la seconde.

J'ajoute aussi que je teste ça en localhost, donc c'est peut être lié à une histoire de chemin absolu/relatif mais je n'arrive pas à comprendre pourquoi, d'autant que si je peux instancier une classe dans le script, en principe une classe qui étends cette classe ne devrait pas rencontrer ce problème..

Donc bref je nage complétement, donc si vous aviez quelques explications ou un petit lien vers une doc un peu plus détaillée ça m'aiderait.
brice_(29) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 15h39   #2
Membre confirmé
 
Avatar de arthuro45
 
Arthur Salomon
Développeur du dimanche
Inscription : juillet 2009
Messages : 592
Détails du profil
Informations personnelles :
Nom : Arthur Salomon
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur du dimanche

Informations forums :
Inscription : juillet 2009
Messages : 592
Points : 213
Points : 213
Bonjour,

Pourquoi tu n'utilises pas l'autoload pour charger tes classes ? Ça t'éviterait les include, require...etc sans parler des éventuels oublis :

http://php.net/manual/fr/language.oop5.autoload.php

Au passage je ne sais pas si c'est volontaire ou pas pour le post, mais tu as une erreur de syntaxe :

Code :
require_once('Classe.php');
arthuro45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 16h31   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Les parenthèses ne sont pas nécessaires.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 19h09   #4
Membre éclairé
 
Avatar de beejeridou
 
Homme
Webmaster
Inscription : février 2007
Messages : 261
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : février 2007
Messages : 261
Points : 315
Points : 315
Tout dépend où se trouve ton script quand tu appelles tes classes, par exemple, si tu te trouve dans index.php à la racine et que tu veux appeller une classe qui se trouve dans le répertoire classes:

Code :
1
2
3
 
require_once("classes/monFichierTropClass.php");
$maClass = new TropClass();
si tu te retrouve déjà dans un sous répertoire lors de l'appel tu dois remonter d'un étage avec :

Code :
1
2
 
require_once("../classes/monFichierTropClass.php");
C'est forcément une erreur de ce genre avec un tel message d'erreur.
__________________
Et pourtant... Elle tourne.
http://www.artisan-developpeur.fr
beejeridou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 20h36   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Le problème ne doit pas venir du require car le script s'arreterait la.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 14h13   #6
Invité régulier
 
Inscription : juillet 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 30
Points : 9
Points : 9
Citation:
Envoyé par arthuro45 Voir le message
Pourquoi tu n'utilises pas l'autoload pour charger tes classes ?
En fait j'avais aspiré cette doc il y a un moment et dans ma version la première note disait le contraire.

Avec l'autoload ça marche mieux, j'ai enlevé tous les require de toutes les classes sinon ça coinçait encore parfois, merci.

Citation:
Envoyé par beejeridou
C'est forcément une erreur de ce genre avec un tel message d'erreur.
Oui mais je n'ai pas trouvé d'où ça pouvait venir. Et quand je vérifiais le get_included_files la classe de l'erreur était bien dedans, sur la ligne suivante je refaisais un require_once et deux lignes plus bas j'avais toujours l'erreur, il y a sûrement des subtilités qui m'échappent....

J'ai revu un peu aussi la gestion globale des erreurs fatales et avertissements, c'est hallucinant comment PHP dégaine vite. ^^

Merci pour vos réponses.
brice_(29) est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h31.


 
 
 
 
Partenaires

Hébergement Web