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:

nessi

[PHP5] Passage par référence

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...

Partager ce message


Lien à poster
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 !

Partager ce message


Lien à poster
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);

Partager ce message


Lien à poster
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....

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×