Programmation  » [PHP] Comment ne pas marcher dedans...
Catégorie :  
     
[PHP] Comment ne pas marcher dedans...
Publié le 03/08/2006 @ 19:31:34,
Par gizmo
Bon, je propose de rassembler ici toutes les pire merdes issues du moteur PHP, parce que bon, y en a des tas, mais si on sait construire une petite base de connaissance, cela permettra d'éviter de toujours marcher dedans (il parait que cela porte bonheur :kiki: )

Alors, j'ouvre le bal avec PHP 5.0.4

  1. <?php 
  2. $text = 'ici du TEXTE A CAPTURER et puis du blabla'
  3. preg_match_all('/(?P<super>[A-Z][A-Z ]+)/'$text$matches); 
  4. echo "AVANT\n"
  5. var_dump($matches); 
  6. preg_replace_callback('/(?P<super>[A-Z][A-Z ]+)/''callback'$text); 
  7. function callback($matches) { 
  8. echo "APRES\n"
  9. var_dump($matches); 
  10. ?>


Et en sorties, on a un magnifique


AVANT
array(3) {
[0]=>
array(1) {
[0]=>
string(17) "TEXTE A CAPTURER "
}
["super"]=>
array(1) {
[0]=>
string(17) "TEXTE A CAPTURER "
}
[1]=>
array(1) {
[0]=>
string(17) "TEXTE A CAPTURER "
}
}
APRES
array(2) {
[0]=>
string(17) "TEXTE A CAPTURER "
[1]=>
string(17) "TEXTE A CAPTURER "
}


Magnifique n'est-ce pas? :itm:
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 03/08/2006 @ 19:39:17,
Par zion
Ca me donne mal au crâne :itm:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 03/08/2006 @ 20:37:39,
Par max
Hmmmm, si tu pouvais détailler, car j'ai l'impression que ça fait ce qui dit le mode d'emplois :ohwell:

Il doit y avoir un truc qui m'échappe (je ne suis pas ironique là, je précise).
Trololo
     
[PHP] Comment ne pas marcher dedans...
Publié le 04/08/2006 @ 01:27:53,
Par gizmo
Si ça faisait ce que dit le mode d'emploi, j'aurais aussi ma clef "super" passée dans ma version avec callback.

Dernière édition: 04/08/2006 @ 01:28:17
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 04/08/2006 @ 11:34:24,
Par zion
En relisant ce matin, j'ai enfin pigé :ddr555:

Joli :petrus:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 04/08/2006 @ 18:55:04,
Par max
Joli dans un sens, qui va voir dans les sources pour voir si c'est "normal" ou pas :smile:
Si la variable super est créé avant ou après le traitement dans le cas de preg_match_all ? Vu que preg_replace_callback ne renvoie pas l'ensemble des matches dans un tableau en fin de fonction, on pourrait trouver ça normal, mais si tu veux faire quelques choses pendant le preg_replace_callback sur chaque résultat et en même temps recevoir la chaine de charactère transformé, je comprends que tu sois déçu. Il faudra voir ce qu'il existe comme littérature sur l'usage des callbacks.

Sinon, tu as trouvé ce erreur/bug/curiosité de quelle manière ?

Max, qui aime bien apprendre


ps: joli aussi le parseur syntaxique d'informaticien, je viens de réaliser que chaque fonction à son lien vers la doc PHP :clap:

Dernière édition: 04/08/2006 @ 18:55:53
Trololo
     
[PHP] Comment ne pas marcher dedans...
Publié le 04/08/2006 @ 19:14:28,
Par gizmo
J'ai trouvé ce bug en créant mon moteur de template. Comme il est possible que je rajoute des fonctionnalités par la suite, je n'avais pas envie de devoir recompter mes parenthèses de regexp dans tout mon code à chaque modif. Mais bon, visiblement c'est trop évolué pour php.
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 04/08/2006 @ 19:48:14,
Par zion

ps: joli aussi le parseur syntaxique d'informaticien, je viens de réaliser que chaque fonction à son lien vers la doc PHP :clap:


merci :dawa:

Y a le même pour pleins de languages, je me demande si j'envoie pas sur allhtml pour l'HTML d'ailleurs :dawa:

Enfin ca évite les copier/coller à gogo :oh:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 05/08/2006 @ 13:45:00,
Par ovh
ps: joli aussi le parseur syntaxique d'informaticien, je viens de réaliser que chaque fonction à son lien vers la doc PHP :clap:

P'tain j'avais jamais remarqué :wam:
C'est super en effet :dawaking:
Je n'ai rien à voir avec www.ovh.com
     
[PHP] Comment ne pas marcher dedans...
Publié le 05/09/2006 @ 20:27:00,
Par gizmo
Bon, encore une incohérence de merde dans PHP :fou:
  1. <?php 
  2. class Test { 
  3.  
  4. protected $_model = 'toto'
  5.  
  6. public final function __get($name) { 
  7. $realName = '_'.$name
  8. if (isset($this->$realName)) { 
  9. $result = $this->$realName
  10. return $result
  11. throw new Exception('Invalid member. "'.$name.'" does not exist.'); 
  12.  
  13. public function __construct() { 
  14.  
  15.  
  16. $test = new Test(); 
  17. $test2="bla"
  18. $test3 = $test2
  19. $test3 = "tutu"
  20. echo $test2"\n"
  21. $test->model = 'hello'
  22. echo $test->model
  23. ?>


Output:


bla
hello


Résultat des courses: Ces imbéciles se sont tellement chiés dessus qu'il est impossible de travailler sur des copies de variables membres d'un objet. Super pratique lorsque l'on veut rendre un objet immuable de manière élégante :fou:


EDIT: Bon, alors, le fait est que ces imbéciles ont mis un setter par défaut, php4 staïle :kiki: Du coup, en rajoutant la méthode

  1. public final __set($name$value){}


On règle le problème. C'est évidemment super pratique pour débugger s'il instancie des nouvelles variables à chaque faute de frappe, même dans les objets :halalala:

Dernière édition: 05/09/2006 @ 20:45:11
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 10/09/2006 @ 14:55:51,
Par gizmo
Bon, alors, dans la catégorie "Je suis incapable de passer des arguments correctement à une fonction", j'appelle PHP!

Petite démonstration par l'exemple:

  1. <?php 
  2. class Test { 
  3.  
  4. protected $_model = 'toto'
  5.  
  6. public final function __get($name) { 
  7. $realName = '_'.$name
  8. if (isset($this->$realName)) { 
  9. return $this->$realName
  10. throw new Exception('Invalid member. "'.$name.'" does not exist.'); 
  11.  
  12. public function badCase() { 
  13. if (!empty($this->model)) { 
  14. echo 'Hello "badCase"!'"\n"
  15. public function goodCase() { 
  16. $model = $this->model
  17. if (!empty($model)) { 
  18. echo 'Hello "goodCase"!'"\n"
  19. $test = new Test(); 
  20. echo $test->model"\n"
  21. $test->badCase(); 
  22. $test->goodCase(); 
  23. ?>


Et en sortie, on obtient:


toto
Hello "goodCase"!


Donc, en cas d'appel à une fonction implicite, PHP est incapable d'évaluer D'ABORD cette fonction avant de passer le résultat comme argument et, au lieu de faire un passage par référence pour économiser de la place mémoire et éviter une évaluation inutile, il se content de copier une valeur NULL, ce con.

Et dire que cette merde est acclamée par les foules...
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 10/09/2006 @ 22:40:00,
Par zion
Donc, en cas d'appel à une fonction implicite, PHP est incapable d'évaluer D'ABORD cette fonction avant de passer le résultat comme argument et, au lieu de faire un passage par référence pour économiser de la place mémoire et éviter une évaluation inutile, il se content de copier une valeur NULL, ce con.


Roh ptain celui la il est joli :oh: :oh: :oh: :oh:

T'as pensé faire du report chez eux parfois? :oh:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 10/09/2006 @ 22:55:39,
Par gizmo
Non. Avec les conneries qu'ils sont en train de planifier pour la v6, je me dis que si je viens avec mes questions sur des fonctionnalités qu'à peine 0.5% des progammeurs php utilisent (genre tout ce qui sert à coder un rien proprement), il vont juste m'envoyer chier ou, pire, retirer la fonctionnalité.
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 10/09/2006 @ 23:32:20,
Par zion
C'est vrai qu'à l'époque, je les avais contacté pour leur demander d'inclure le "with" de Delphi... Ils m'ont envoyé chier sur la lune :ddr555:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 16/09/2006 @ 01:26:09,
Par philfr
Et dire que cette merde est acclamée par les foules...


De toutes façons, c'est de ta faute... C'est Rasmus Lerdorf, le créateur de PHP lui-même qui le dit :oh: ...

http://www.internetnews.com/dev-news/article.php/3631831

Ah, oui, il dit aussi que MySQL c'est bien, et PostgreSQL, c'est nul (enfin, en gros)...

:lol:
     
[PHP] Comment ne pas marcher dedans...
Publié le 17/09/2006 @ 01:07:25,
Par gizmo
Euh, ouais. Enfin, c'est vraiment pas un mec que je considère comme une lumière, donc bon...
Concept vivant.
     
[PHP] Comment ne pas marcher dedans...
Publié le 17/09/2006 @ 23:04:17,
Par zion
Mais il est gentil, déjà vu à une conférence :petrus:

Il a été important pour php1/2... Après bon il est plus vraiment de la partie :oh:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 17/09/2006 @ 23:49:47,
Par philfr
T'étais au OSDEM à la plaine ? :grin:

Je l'y ai vu aussi, où il avouait la façon dont il "développait" les premiers balbutiements de PHP1...
     
[PHP] Comment ne pas marcher dedans...
Publié le 18/09/2006 @ 00:02:18,
Par zion
Oui, j'y étais, j'ai encore le tshirt monsieur :oh:
J'ai fait l'OSDEM et tous les FOSDEM :oh: (même le dernier mais j'y ai pas vu grand chose, trop malade).

Tu te rappelles donc de son explication sur le "crouic" du disque pour son while? :ddr555:
Ca situe quand même :ddr555:
Je suis le Roy :ocube:
     
[PHP] Comment ne pas marcher dedans...
Publié le 18/09/2006 @ 11:51:01,
Par Altar
C'est quoi le crouic :oh: On veut savoir :ddr555:
Répondre  - Catégorie :  
Informaticien.be  - © 2002-2020 Akretio SPRL  - Generated via Kelare
The Akretio Network: Akretio  - Freedelity  - KelCommerce  - Votre publicité sur informaticien.be ?