samedi 8 septembre 2007

référence implicite en POO PHP5 VS PHP3


hein qu'il fait peur ce crétin de titre ?
comme il est dit dans les forums : pour quoi faire simple quand on peut faire compliqué ?
encore un coup c'est pour m'être galéré 4h sur un pb à la con.
désolé de me défouler dans ce blog .... c'est encore de la faute d'oscommerce..
dans le fichier email.php, classe (pas stylé, mais orienté objet)
/* HPDL PHP3 */
// $message =& $this->add_alternative_part($null);
$message = $this->add_alternative_part($null);
$this->add_text_part($message, $this->html_text);
/* HPDL PHP3 */
// $related =& $this->add_related_part($message);
$related = $this->add_related_part($message);
$this->add_html_part($related);


for ($i=0; $ihtml_images); $i++) {
$this->add_html_image_part($related, $this->html_images[$i]);
}


if ( (isset($message)) && (is_object($message)) ) {
$output = $message->encode();
$this->output = $output['body'];
//j'ai isolé les morceaux, en fait ya bien mille lignes de bordel
ça marche en local, ça ne marche plus sur le serveur,
en plus cette classe email.php elle a l'air pas mal,
elle récupère ton html et les images
et elle en fait un mime multipart envoyable
avec les images incluse à l'intérieur (cid: tout le bordel);
bref, je compare tout, et voilà t y pas que je me dis
bordel (ça revient souvent) mais comment il fait
pour mettre "$message->..." à jour sans y toucher ?
bordel, dis moi pas que ça marche par objets références ?
bordel, et que cette ligne en commentaire, très discrète,
// $message =& $this->add_alternative_part($null);
$message = $this->add_alternative_part($null);
c'est ce qui fait que j'ai pensé au bordel des passages de paramètres et d'assignation par adresse référence et non par copie.
je me suis pas pris la tête longtemps, j'ai décommenté les trucs,
ce qui a donné plein de
& $message =& $this->add_alternative_part($null);
et
function & add_alternative_part($machin){ 
et ça a marché. mais pourquoi ?

je ne veux pas dire que je vais expliquer que avant, la règle est que toutes les assignations php se font par copie, pour le passage et le retour des parametres, et qu'on a beau chipoter sur la consommation de la mémoire sans déconner n'importe quoi ça coute pas cher. et que depuis php5 (ou php4.0.2 on s'en fout) dans les classes le passage par référence étant obligatoire il est inutile de préciser le '&' devant les fonctions. enfin je suppose que c'est un bordel comme ça j'ai pas vérifié ça m'énerve.
pouquoi ils ont pas gardé un truc compatible ? quoique, l'ancienne syntaxe marche peut etre sur php5, alors pourquoi avoir viré les '&' ? pourquoi ne pas avoir gardé le bon vieux passage par copie ?
pourquoi avoir écrit ce code avec sa tête plutôt qu'avec ses pieds.
Avec sa tête parce que le gars a du comprendre que $message n'est pas une vrai variable mais une référence indirecte de pointeur sur l'alias d'un index sur un objet . et dans son code il montre qu'il a compris : péché d'orgueil !

J'avais envie de me mettre à écrire des classes php , propres, ben c'est passé.
à voir : www.musicovery.com www.telechargez.com (oui, avec 'ez') phpxref phpdocumentor

Aucun commentaire: