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 :

require et autoloader


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut require et autoloader
    Bonjour,

    pour rendre mon code plus clair, je comptais faire des require donc mettre des bouts de code dans des fichiers PHP et le fichier principal serait constitué essentiellement d'une succession de require. Le souci est que le code est de la POO. Au préalable, tout le code étant dans un seul fichier, quand j'instanciais une classe, comme au début du fichier, j'avais mis un use, et que ce fichier contient en fait une autre classe, instanciée dans index.php qui contient l'autoloader, la classe était incluse, donc pas de souci. Mais maintenant, comme j'ai déporté l'instanciation de la classe, du coup, il ne la trouve pas. J'ai tenté de rajouter le use dans le fichier PHP déporté mais il ne la trouve pas plus.

    Comment faire, SVP ?

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour Laurent

    Prends le temps de faire le tour de Composer (https://getcomposer.org/); cet outil excelle dans ce domaine. Tu n'aurais plus qu'à faire un unique require_once() et hop, tout est bon.

    Composer se base sur un fichier composer.json qu'il te faudra créer et tu y diras que p.ex. \MonNameSpace se trouve dans le dossier /src/classes et hop, dès la première utilisation d'une classe de ce namespace, composer sait où aller aller chercher le code de la classe.

    Composer ne sert pas qu'à ça mais aussi à intégrer des dépendances externes (avec un composer require xxx) et tu verras alors que c'est vraiment l'outil parfait pour ce type de besoin.

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour cavo789,

    je me souviens que tu recommandes régulièrement cet outil et que j'avais déjà regardé mais que j'avais abandonné. Je regarderai de nouveau tout à l'heure et si besoin, je poserai des questions.

  4. #4
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Voici un composer.json de l'un de mes projets : https://github.com/cavo789/pandoc/bl.../composer.json

    La partie qui va t'intéresser est https://github.com/cavo789/pandoc/bl...poser.json#L27

    Tu définis un autoload comme tu le verras en ligne 27. Je dis donc "ok, mon ami Composer, mes sources sont dans le dossier /src de mon projet",

    Du coup, lorsque je vais tenter d'accéder à l'une de mes classes (imaginons https://github.com/cavo789/pandoc/bl...andoc.php#L375), composer va lire le nom complet de la classe (https://github.com/cavo789/pandoc/bl...pandoc.php#L38) et va "savoir" que "ok, donc, puisque je dois aller dans le dossier /src du projet pour trouver le code d'une classe, allons donc dans le dossier /src/Exceptions (qui correspond au namespace) et voir si j'ai un fichier PandocSettingsNoPandocRootElement (le nom de la classe donc)." Et bingo, il va trouver la classe (https://github.com/cavo789/pandoc/bl...lement.php#L10).

    Du coup, je n'ai plus à me soucier des différents require; composer le fait pour moi.

    Le reste des infos sur le site de composer : https://getcomposer.org/doc/01-basic...md#autoloading

    A++

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    J'avance très lentement, mais j'avance.

    Déjà, installer composer, ça n'a pas été de la tarte : étant sur un PC professionnel, l'installateur Windows (mon OS est Windows 10) ne marchait pas (ça ouvrait une fenêtre me demandant un mot de passe, que je ne connais pas). Donc chu passer à l'installation en ligne de commande. Ca a fini par marcher.
    2e étape : ajouter une variable d'environnement pour pouvoir taper composer au lieu de php composer.phar. Même ça, ça a pris du temps. J'ai fini par taper environnement dans la barre de recherche et ça m'a ouvert une fenêtre permettant de rentrer une nouvelle variable.

    Bon, j'en suis là. Pas encore essayé de créer un fichier json. Mais une fois que ce sera fait, comment activer composer pour que quand je lance l'exécution de mon projet, il bosse ?

  6. #6
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Il ne bosse pas pendant l'exécution ;-)

    Tu fait un "composer update" p.ex. en ligne de commandes; il va traiter ton fichier composer.json (que tu crées donc) et il va générer tout ce qu'il faut dans le dossier /vendor (qu'il va créer lui).

    Ensuite, comme je le disais, tu dois faire un require unique (https://getcomposer.org/doc/01-basic...md#autoloading) et hop, ton code PHP va donc, lui, charger ce qu'il faut pour l'autoloading. Composer ne tourne donc pas en tâche de fond; il aide à la génération des fichiers (/vendor/autoload.php).

    Composer prend un peu de temps à apprendre mais c'est du temps sacrément bien investi.

    Comme apprendre xdebug; c'est plus long qu'un "var_dump($ma_variable);" mais terriblement plus efficace.

    Perso, je développe depuis un an sous Windows mais dans un environnement WSL2 (Linux/Ubuntu); j'utilise donc composer.phar que j'ai mis dans un dossier global. Mais fonctionne parfaitement sous Windows itou.

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

Discussions similaires

  1. Page blanche lors d'un require autoload
    Par Yadreï dans le forum Langage
    Réponses: 2
    Dernier message: 02/01/2018, 16h56
  2. Réponses: 7
    Dernier message: 06/03/2014, 08h42
  3. Mélange autoload et require
    Par ovh dans le forum Zend Framework
    Réponses: 7
    Dernier message: 27/11/2008, 14h07
  4. [Forms6i], required item
    Par orcl dans le forum Forms
    Réponses: 4
    Dernier message: 25/05/2004, 17h31
  5. Bug sur la prorpiété required d'un TField avec ADO ???
    Par denrette dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/11/2003, 11h04

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