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 :

[Système] Pas de pointeurs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Système] Pas de pointeurs
    Bonjour à tous,

    J'ai un gros soucis et malgré une bonne heure de recherche, pas de solution en vue.
    En gros, ce que j'ai besoin de faire:
    J'ai une fonction que j'utilise très fréquemment. Je ne veux pas modifier son fonctionnement (notamment le nombre d'arguments qu'elle contient, ou le type de variables passées en argument) pour des raisons de compatibilité.

    En gros, j'aurais besoin de connaitre une variable passée en argument, de pouvoir l'identifier. L'idée pour moi c'est de faire un tableau de "pointeurs" permettant d'ajouter une information sur les variables qui ont été en argument de la fonction.

    Clairement, avec un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $foo = 'test';
    function toto($bar)
    {
        // Et là, mon tableau
    }
    toto($foo);
    ?>
    Le problème est le suivant, voilà à quoi j'avais pensé: simplement enregistrer le nom de la variable dans le tableau, pour ainsi avoir $tableau['foo'] d'existant. Sauf que ça me paraît tout simplement impossible. De plus un peu bourrin, suffirait que la variable ne soit plus la même pour que je n'y vois que du feu... Mais à la rigueur ça ne dérangerait pas trop.

    Ne sachant pas comment faire, j'ai ensuite pensé aux pointeurs. Je n'en avais jamais eu besoin et apparemment, je suis en train de découvrir que même si le passage par référence existe, la notion de pointeurs est absente de php...

    Alors question: je me plante comme une courge et l'une des deux solutions précédentes est réallisable ? Sinon, une idée de comment faire ?

    Si vous avez besoin d'un complément d'infos, aucun soucis.

    Merci.
    Dernière modification par julp ; 16/02/2007 à 13h17. Motif: ajout balises [code] pour plus de lisibilité

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par jvgamers
    En gros, j'aurais besoin de connaitre une variable passée en argument, de pouvoir l'identifier. L'idée pour moi c'est de faire un tableau de "pointeurs" permettant d'ajouter une information sur les variables qui ont été en argument de la fonction.

    Clairement, avec un exemple:
    <?php
    $foo = 'test';
    function toto($bar)
    {
    // Et là, mon tableau
    }
    toto($foo);
    ?>
    Salut,

    J'ai pas bien compris la problématique. Tu peux être plus concret ?

  3. #3
    Membre expérimenté Avatar de More
    Inscrit en
    Janvier 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 252
    Par défaut

    peut-tu minimiser de l'ecriture et expliquer plus, car j'ai pas compri ton besoin.

    ______________

    Agir, rectifier, remettre tout a Zero mais ne jamais reste inactif a la recherche du parfait.

  4. #4
    Membre expérimenté Avatar de More
    Inscrit en
    Janvier 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 252
    Par défaut
    salut,

    ce que j'ai compri, c'est que tu veux mettre des indices sur les variables du tableau, c'est comme un Hashtable (ou dictionnaire de donnees) dans Java
    ou Vb. c'est ca votre besoin ?


    _____________________

    Agir, rectifier, remettre tout a Zero mais ne jamais reste inactif a la recherche du parfait.

  5. #5
    Invité
    Invité(e)
    Par défaut
    D'accord, alors:
    J'ai une fonction de sécurisation des variables. Elle a pour avantage d'être très compléte et je l'utilise donc toujours.
    Cela dit, il m'arrive dans une fonction de sécuriser une variable passée en argument alors qu'elle l'a déjà été avant l'appel de la fonction. Je me retrouve donc avec quelques coquilles.

    L'idée pour moi c'est d'enregistrer dans un tableau les variables qui ont été sécurisées pour que la fonction ne fasse rien le cas échéant.

    L'idée, c'était de faire quelques chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    function securisation($var)
    {
      global $tableau_securise;
      $tableau_securise[??????] = true;
    }
    function trucmuche($var)
    {
      return securisation($var);
    }
    $foo = trucmuche(securisation($var));
    ?>
    Bon, c'est tout à fait bidon, mais en gros tu vois bien que le cas échéant, la variable foo va être sécurisée deux fois. L'idée, c'est de compléter le "tableau_securise" pour qu'une variable qui soit listée dedans ne subisse pas deux fois la sécurisation.

    Le truc, c'est qu'est ce que je mets comme index à mon tableau à la place de ???? qui serve d'identifiant aux variables sachant qu'on a pas de pointeurs ?

    Edit:
    Pour le hashtable, j'ai lu comme définition: "La classe Hashtable permet de stocker des valeurs en les associant à des identificateurs uniques calculés à partir des clés.".
    Moi il me faudrait un identificateur unique d'une variable, pas d'une clé de tableau.

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    OK, je crois comprendre : ton tableau doit contenir les noms de variables qui ont déjà été sécurisées ?

    Et si c'est bien ça, ton problème est de pouvoir stocker le nom des variables sans qu'elles soient interpolées par leur valeurs. J'ai bon ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Exactement. Et plus encore, le problème est de ne pas me retrouver lorsque je suis dans une fonction avec le nom de la variable locale (si je reprends mon exemple précédent, il ne doit dans trucmuche savoir que $var correspond en réalité à $foo pour ne pas refaire la sécurisation).

    Bon, déjà le problème estapparemment à peu près compris :p
    Une piste de solution ?

  8. #8
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    J'ai trouvé ça :
    Here's a function to get the name of a given variable. Explanation and examples below.
    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
     
    <?php
      function vname(&$var, $scope=false, $prefix='unique', $suffix='value')
      {
       if($scope) $vals = $scope;
       else      $vals = $GLOBALS;
       $old = $var;
       $var = $new = $prefix.rand().$suffix;
       $vname = FALSE;
       foreach($vals as $key => $val) {
         if($val === $new) $vname = $key;
       }
       $var = $old;
       return $vname;
      }
    ?>
    Explanation:

    The problem with figuring out what value is what key in that variables scope is that several variables might have the same value. To remedy this, the variable is passed by reference and its value is then modified to a random value to make sure there will be a unique match. Then we loop through the scope the variable is contained in and when there is a match of our modified value, we can grab the correct key.

    Examples:

    1. Use of a variable contained in the global scope (default):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
      $my_global_variable = "My global string.";
      echo vname($my_global_variable); // Outputs:  my_global_variable
    ?>
    2. Use of a local variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
      function my_local_func()
      {
       $my_local_variable = "My local string.";
       return vname($my_local_variable, get_defined_vars());
      }
      echo my_local_func(); // Outputs: my_local_variable
    ?>
    3. Use of an object property:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
      class myclass
      {
       public function __constructor()
       {
         $this->my_object_property = "My object property  string.";
       }
      }
      $obj = new myclass;
      echo vname($obj->my_object_property, $obj); // Outputs: my_object_property
    ?>
    Pas eu le temps de tout lire, mais ça semble encourageant.
    Pour info, voici toute la page : http://fr.php.net/language.variables

    --- edit ---
    Tiens nous au courant de tes avancées, la question m'intéresse beaucoup.

  9. #9
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Avec la Reflection API (voir la doc php et uniquement pour php5), il y aurait peut être moyen de faire ce que tu souhaites. Mais ça ne fonctionnera que pour des paramètres de méthodes de classes. Regarde pour ReflectionParameter::getName()

Discussions similaires

  1. Forcer l'affichage lorsque ressources systèmes pas dispo
    Par EricS dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2011, 12h00
  2. Réponses: 4
    Dernier message: 19/01/2008, 02h16
  3. Réponses: 4
    Dernier message: 16/09/2007, 16h50
  4. Chaines et pointeurs mais pas "const"
    Par hpfx dans le forum C
    Réponses: 9
    Dernier message: 05/10/2003, 20h23
  5. système expert ou pas
    Par Rmotte dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 03/10/2003, 13h36

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