IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonctionnement de require_once [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once('Classe.php');

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Les parenthèses ne sont pas nécessaires.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    require_once("../classes/monFichierTropClass.php");
    C'est forcément une erreur de ce genre avec un tel message d'erreur.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le problème ne doit pas venir du require car le script s'arreterait la.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo