Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[PHP5] Passage par référence


nessi

Messages recommandés

Salut les gens !

 

Alors voilà :

 

J'ai développé une application en PHP5 + Apache2.

Lors d'un changement d'environnement (PHP5 + Apache 1), avec une configuration sensiblement différente (Windows / Linux), je suis tombé sur un cas particulier.

 

J'utilise une fonction avec passage par référence pour récupére un ID.

 

public static function get(&$uid) { }

 

Puis j'appelle ma fonction de cette manière :

 

objet::get($id = null);

 

J'ai utilisé "$id = null" pour être 'propre', de sorte que la variable soit instanciée à 'null' AVANT de passer dans la fonction.

 

Et bien voilà, cette configuration marche sur ma config (la valeur est bien mise à jour), mais pas sur la nouvelle ($id vaut null)(sans renvoyer d'erreur pour autant (log ou écran)).

 

Alors je pose la question : ou est le problème sachant que :

- si j'enlève "=null", ça marche dans les deux cas (logique) ;

- les deux config utilisent PHP5 (même version), mais une version d'Apache différente (2 vs 1) ;

- allow_call_pass_reference vaut 'Off' dans tous les cas (pour les sceptiques) ;

- j'ai testé avec PHP5 + Apache 2 sur en environnement Linux et ça marche sans problème ;

- objet::get($id = null) n'est pas valide en PHP4 ;

 

Bref, si vous avez des idées, pour essayer de comprendre...

Lien vers le commentaire
Partager sur d’autres sites

Perso j'essaierais pas de comprendre, je mettrais deux lignes.

$id = null;
objet::get($id);

Au moins comme ça tu as la certitude que ton code est portable....

Pour le reste, les subtilités sont peut-être décrites dans la doc de PHP ou discutées sur les forums dédiés... Parce que là, c'est ultra-pointu comme question !

Lien vers le commentaire
Partager sur d’autres sites

Perso j'essaierais pas de comprendre, je mettrais deux lignes.

$id = null;
objet::get($id);

Au moins comme ça tu as la certitude que ton code est portable....

Pour le reste, les subtilités sont peut-être décrites dans la doc de PHP ou discutées sur les forums dédiés... Parce que là, c'est ultra-pointu comme question !

 

Ben justement, le but c'est de comprendre.

Je pense que ça vient de l'utilisation de PHP5 avec Apache 1 et non la 2 comme sur l'original.

Evidemment, ce n'est pas Apache en lui même qui pêche, mais le module pour PHP5, différent selon la version d'Apache utilisée (cf http.conf pour la configuration d'Apache).

 

A part ça je ne vois pas ce qui pourrait poser problème, puisque ça m'a tout l'air d'être une spécificité du compilateur.

 

Enfin, je vous tiens au courant si je trouve quelque chose.

 

Perso, je suis une feignasse et j'utilise plutôt ça :

objet::get(@$id);

Lien vers le commentaire
Partager sur d’autres sites

Je pense que ça vient de l'utilisation de PHP5 avec Apache 1 et non la 2 comme sur l'original.
Ca me semble étrange parce que justement Apache se sert d'un module pour décharger l'interprétation du code PHP à php.exe (par le biais de ses dll), donc l'utilisation d'une même version de PHP devrait assurer une même interprétation du code...

Enfin, je dis ça.. mais j'ai jamais étudié de près les imbrications entre Apache, ses modules, et PHP....

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...