Programmation » [PHP] Comment ne pas marcher dedans...
[PHP] Comment ne pas marcher dedans...
Publié le 03/08/2006 @ 19:31:34,
Par gizmoBon, 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 )
Alors, j'ouvre le bal avec PHP 5.0.4
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?
Alors, j'ouvre le bal avec PHP 5.0.4
- <?php
- $text = 'ici du TEXTE A CAPTURER et puis du blabla';
- preg_match_all('/(?P<super>[A-Z][A-Z ]+)/', $text, $matches);
- echo "AVANT\n";
- var_dump($matches);
- preg_replace_callback('/(?P<super>[A-Z][A-Z ]+)/', 'callback', $text);
- function callback($matches) {
- echo "APRES\n";
- var_dump($matches);
- }
- ?>
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?
Concept vivant.
[PHP] Comment ne pas marcher dedans...
Publié le 03/08/2006 @ 19:39:17,
Par zionCa me donne mal au crâne
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 03/08/2006 @ 20:37:39,
Par maxHmmmm, si tu pouvais détailler, car j'ai l'impression que ça fait ce qui dit le mode d'emplois
Il doit y avoir un truc qui m'échappe (je ne suis pas ironique là , je précise).
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 gizmoSi ç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
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 zionEn relisant ce matin, j'ai enfin pigé
Joli
Joli
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 04/08/2006 @ 18:55:04,
Par maxJoli dans un sens, qui va voir dans les sources pour voir si c'est "normal" ou pas
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
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 gizmoJ'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 zionps: joli aussi le parseur syntaxique d'informaticien, je viens de réaliser que chaque fonction à son lien vers la doc PHP :clap:
merci
Y a le même pour pleins de languages, je me demande si j'envoie pas sur allhtml pour l'HTML d'ailleurs
Enfin ca évite les copier/coller à gogo
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 05/08/2006 @ 13:45:00,
Par ovhps: 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é
C'est super en effet
Je n'ai rien à voir avec www.ovh.com
[PHP] Comment ne pas marcher dedans...
Publié le 05/09/2006 @ 20:27:00,
Par gizmoBon, encore une incohérence de merde dans PHP
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
EDIT: Bon, alors, le fait est que ces imbéciles ont mis un setter par défaut, php4 staïle Du coup, en rajoutant la méthode
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
Dernière édition: 05/09/2006 @ 20:45:11
- <?php
- class Test {
- protected $_model = 'toto';
- public final function __get($name) {
- $realName = '_'.$name;
- if (isset($this->$realName)) {
- $result = $this->$realName;
- return $result;
- }
- throw new Exception('Invalid member. "'.$name.'" does not exist.');
- }
- public function __construct() {
- }
- }
- $test = new Test();
- $test2="bla";
- $test3 = $test2;
- $test3 = "tutu";
- echo $test2, "\n";
- $test->model = 'hello';
- echo $test->model;
- ?>
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
EDIT: Bon, alors, le fait est que ces imbéciles ont mis un setter par défaut, php4 staïle Du coup, en rajoutant la méthode
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
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 gizmoBon, alors, dans la catégorie "Je suis incapable de passer des arguments correctement à une fonction", j'appelle PHP!
Petite démonstration par l'exemple:
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...
Petite démonstration par l'exemple:
- <?php
- class Test {
- protected $_model = 'toto';
- public final function __get($name) {
- $realName = '_'.$name;
- if (isset($this->$realName)) {
- return $this->$realName;
- }
- throw new Exception('Invalid member. "'.$name.'" does not exist.');
- }
- public function badCase() {
- if (!empty($this->model)) {
- echo 'Hello "badCase"!', "\n";
- }
- }
- public function goodCase() {
- $model = $this->model;
- if (!empty($model)) {
- echo 'Hello "goodCase"!', "\n";
- }
- }
- }
- $test = new Test();
- echo $test->model, "\n";
- $test->badCase();
- $test->goodCase();
- ?>
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 zionDonc, 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
T'as pensé faire du report chez eux parfois?
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 10/09/2006 @ 22:55:39,
Par gizmoNon. 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 zionC'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
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 16/09/2006 @ 01:26:09,
Par philfrEt 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 ...
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)...
[PHP] Comment ne pas marcher dedans...
Publié le 17/09/2006 @ 01:07:25,
Par gizmoEuh, 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 zionMais il est gentil, déjà vu à une conférence
Il a été important pour php1/2... Après bon il est plus vraiment de la partie
Il a été important pour php1/2... Après bon il est plus vraiment de la partie
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 17/09/2006 @ 23:49:47,
Par philfrT'étais au OSDEM à la plaine ?
Je l'y ai vu aussi, où il avouait la façon dont il "développait" les premiers balbutiements de PHP1...
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 zionOui, j'y étais, j'ai encore le tshirt monsieur
J'ai fait l'OSDEM et tous les FOSDEM (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?
Ca situe quand même
J'ai fait l'OSDEM et tous les FOSDEM (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?
Ca situe quand même
Je suis le Roy
[PHP] Comment ne pas marcher dedans...
Publié le 18/09/2006 @ 11:51:01,
Par AltarC'est quoi le crouic On veut savoir