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 :

private static $url = $_SERVER['REQUEST_URI']


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mai 2018
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mai 2018
    Messages : 275
    Points : 98
    Points
    98
    Par défaut private static $url = $_SERVER['REQUEST_URI']
    Bonjour

    Je voulais faire une petite class type router et utiliser $_SERVER['REQUEST_URI'].

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Routeur {
     
    private static $url = $_SERVER['REQUEST_URI'];
    	public function routeur_index() {
    		var_dump(self::$url);
    		}
    }
    Cela ne fonctionne pas, cela ne donne rien
    alors que dans mon fichier index si je défini une constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define( 'URL' , $_SERVER['REQUEST_URI'] );
    et que je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Routeur {
     
    private static $url = URL;
    	public function routeur_index() {
    		var_dump(self::$url);
    		}
    }
    Cela fonctionne.

    Avez vous une explication...

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    poste le code du test et l'url qui t'a amené à la conclusion que "Cela ne fonctionne pas, cela ne donne rien"

  3. #3
    Membre régulier
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mai 2018
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mai 2018
    Messages : 275
    Points : 98
    Points
    98
    Par défaut
    Pour le moment c'est tout simple je détecte si c'est la page home.

    Sur ma page index.php
    Logique_Routeur::routeur_instance();


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class Routeur {
     
    	private static $_instance;
     
    	private static $url = $_SERVER['REQUEST_URI'];
     
     
    	public static function routeur_instance() { 
    		if ( is_null( self::$_instance ) ) { 
    			self::$_instance = new Routeur(); 
    			self::$_instance->index();
    		}
    		return self::$_instance; 
    	}
     
    	public function index() {
    		if ( self::$url === '/' ) {
    			echo ('c\'est la home page'); 
    		}
    		else {
    			echo ('c\'est autre chose'); 		
    		}
    	}
     
    }

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Comme tu débutes, je te conseille de ne pas utiliser le monde static, c'est rajouter une couche de complexité alors qu'en l'état ce n'est pas nécessaire.
    Ensuite, le codage d'un routeur n'est pas chose aisée. T'es sûr de vouloir t'embarquer là-dedans malgré tout ?
    Si oui, le mieux que tu puisses faire c'est de t'inspirer de ce qui a déjà été fait afin de bien comprendre les mécanismes sous-jacents ce qui te permettra de les adapter à ta sauce.
    Bref, t'as du pain sur la planche.

  5. #5
    Membre régulier
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mai 2018
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mai 2018
    Messages : 275
    Points : 98
    Points
    98
    Par défaut
    Si la variable
    private static $url = $_SERVER['REQUEST_URI'];
    n'est pas en static
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private $url = $_SERVER['REQUEST_URI'];
    Je ne peux pas appeler $url, sauf a la créer dans le constructeur, mais du coup je me retrouve avec un argument $this->url,

    et dans l'idée je ne voulais pas avoir d'argument $this->url inutile (hors de la fonction) qui vienne surcharger mon objet routeur.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    tu devrais te pencher sur les norme PSR.
    Ensuite ton routeur va être bancal, tu devrais être capable de lui passer n'importe quoi à analyser et pas juste $_SERVER['REQUEST_URI']. D'où l'utilité de passer cela en paramètre à une fonction dispatch() par exemple au lieu de lui figer cette valeur...

    Je te le redis, essaie de bien comprendre ce qui a été déjà fait en la matière et inspire toi en.
    Tu dois aussi monter en premier ton niveau en programmation objet afin de ne pas cumuler les difficultés.

  7. #7
    Membre régulier
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mai 2018
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mai 2018
    Messages : 275
    Points : 98
    Points
    98
    Par défaut
    Merci, pour les réponses, je viens de voir que généralement il faut éviter les fonction et variables statiques.... sauf pour faire un design pattern (singleton)

    Bon l'idée c'était de faire un singleton au niveau de mon OBJET router car un router ne doit être instancier qu'une seule fois, je ne dois pas avoir plusieurs objets router.

    Je viens de tomber sur d'autre tuto sur du POO 100%... ils expliquent que l'on ne doit avoir que des objets qui doivent communiquer entre eux...

    du coup j'ai 2 questions

    1°) Quand on dit que les objets doivent communiquer entre eux cela veux dire que l'on passe les objets d'un objet à l'autre (injection de dépendance) style je passe mon Objet Router à mon Objet Controller... ou il faut créer une class intermédiaire sorte de jointure qui fait le lien entre les objets...

    2°) Static ou pas, pour évoluer et comprend de mes erreurs
    Je ne comprend pas l'erreur de mécanisme qui fait que
    private static $url = URL;
    fonctionne et pas
    private static $url = $_SERVER['REQUEST_URI'];

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    tiens regarde mon blog, la problématique y est abordée : ici
    puis regarde le second billet qui lui va t'apporter une approche de solution pour la problématique du routeur

    Le souci quand tu fais : private static $url = $_SERVER['REQUEST_URI']; est que le tableau $_SERVER n'est disponible qu'à l'exécution (runtime) et que dans ta classe, l'utilisation sous forme de propriété nécessite que cette information soit disponible à la compilation (compile time). D'où l'erreur que tu ramasses.
    Tu peux procéder comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Foo
    {
        private static $uri = '';
     
        public function __construct()
        {
            self::$uri = $_SERVER['REQUEST_URI'];
        }
    }

  9. #9
    Membre régulier
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mai 2018
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mai 2018
    Messages : 275
    Points : 98
    Points
    98
    Par défaut
    Super merci problème résolu et un apprentissage de plus merci

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

Discussions similaires

  1. private static final String vs inline
    Par Reeter dans le forum Langage
    Réponses: 5
    Dernier message: 29/10/2008, 20h26
  2. substr($_SERVER['REQUEST_URI']) et parse_url
    Par eilijah dans le forum Langage
    Réponses: 7
    Dernier message: 20/08/2008, 14h14
  3. Réponses: 1
    Dernier message: 05/01/2008, 17h34
  4. Réponses: 2
    Dernier message: 06/12/2007, 23h45
  5. Rediriger via $_SERVER['REQUEST_URI'];
    Par Jiraiya42 dans le forum Langage
    Réponses: 45
    Dernier message: 07/05/2006, 17h17

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