570

Ah non, pour le peu de php qu'il y a là, rien à reprocher. Je n'ai jamais été fan des do/while (je préfère un while, savoir d'avance ce que fais la boucle) mais c'est purement personnel.

Ah, et j'oubliais pour le dessert : le <p>&nbsp;</p> juste après le while. Il y en avait un peu plus, je vous le laisse.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

571

Meowcate (./564) :
Quand je bosse sur un vieux-vieux projet web, en général plus rien ne m'étonne : des classiques-mais-pas-grave comme finir une page PHP sur une balise fermante, des trucs peu lisibles comme des <?php } ?> à la suite après un long enfilage... on va dire pratiques d'époque, codeur mal formés, etc...
Et des fois, on a juste envie de se dire "Mais... pourquoi ?"<div id="contenu"> <?php do { ?> <table width="100%" border="0" cellspacing="5"> <tr> <th width="54%" scope="col"><div align="left"><?php echo $row_Recordset1['titre']; ?></div></th> <th width="24%" scope="col"><?php echo $row_Recordset1['nom_auteur']; ?></th> <th width="22%" scope="col"> <a href="../actus/form.php?id_actu=<?php echo $row_Recordset1['id_actu']; ?>">&Eacute;diter cet article</a> <a href="../actus/delete_actu.php?id_actu=<?php echo $row_Recordset1['id_actu']; ?>">Supprimer cet article</a> </th> </tr> </table> <h2> </h2> <p><br /> </p> <?php } while ( ... ); ?><p>&nbsp;</p> </div>

Il y a des fois, je suis juste sans voix. Je compare souvent mon boulot à celui d'un architecte doublé du maçon, pour faire comprendre aux gens en quoi cela consiste exactement... et là, j'ai l'impression de voir une construction de Numerobis.

Où t'as eu accès aux sources de ti-fr ? cheeky
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

572

<p>&nbsp;</p>


Ca sent le code d'un editeur HTML WYSIWYG tout ca.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

573

frontpage pour être précis smile
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

574

Pas forcement, Word, Dreamweaver et meme certain editeur WYSIWYG HTML le font
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

575

Oui, mais chacun a sa signature...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

576

En même temps si on fait un nouveau paragraphe vide, c'est le comportement normal, non ?

577

Effectivement, je n'avais pas songé à un WYSIWYG, et ça expliquerait pas mal de choses.

Pour changer, moment de honte personnelle sur SQL Server avec un outil client qui a finit par planter après un bon temps d'utilisation.
Un problème de montée en charge en quelque sorte : quelque part dans mon code, se cachait une recherche sur une liste d'éléments, en ayant auparavant établi une liste d'id des éléments qui ne devaient PAS s'y trouver.
Ce qui fait qu'avec les éléments qui grandissaient en nombre jour après jour, le serveur a fini par refuser d'exécuter une requête résumée par "SELECT * FROM foo WHERE foo.id NOT IN (...)" suivi... d'une liste de plusieurs milliers d'ID à la suite.
Je ne vais pas entrer dans les détails, mais à ma défense, il y avait un contexte pour le faire ainsi ! je ne me suis pas soucié de l'accroissement des données, "c'est tout" tsss
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

578

pour ce genre de requêtes, la création d'un index peut parfois résoudre le problème hein... sauf si c'est vraiment merdique
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

579

De mon expérience personnelle, les clauses "in" gigantesques peuvent avoir des performances étonnamment bonnes sous oracle qui les gère plutôt bien, même si j'avoue que c'est quand même assez moche d'en venir là.
avatar

580

Je pense pas que ce soit un problème de performances, SQL server n'aime juste pas forcément les listes IN gigantesques: Problème de taille de la requête plutôt que de capacité à l'exécuter.
Et en général il est suffisamment intelligent (cotnrairement à d'autres) pour automatiquement créer un index sur les données du IN. (En tout cas c'est le souvenir que j'en ai gardé)
Par contre, c'est clair qu'il y a d'autres moyens de faire (table temporaire, ou bien procédure stockée + TVP), mais c'est pas forcément très abordable en PHP tongue
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

581

Ce serait en effet plus crédible : j'envoie une liste des ID dans le IN, parce que je la détermine spécialement, ce n'est pas un "IN (SELECT ID FROM...)". Je n'ai pas pensé à la taille de la requête.
Et pour info je n'oublie pas de créer les index kivonbien, c'est un automatisme smile
Mais c'est aussi ça de travailler sur une BDD dont on n'a pas le contrôle, je délègue certaines étapes à PHP
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

582

Because IRC is the fast debugging medium, I went to the official PHP channel with the information I had. I asked the people on the channel for hints, and was instantly kickbanned for reporting a bug.
I have realised that any attempt to improve the security of PHP from the inside is futile. The PHP Group will jump into your boat as soon you try to blame PHP's security problems on the user but the moment you criticize the security of PHP itself you become persona non grata. I stopped counting the times I was called immoral traitor for disclosing security holes in PHP

(ça date, j'espère que ça a changé depuis tongue)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

583

Ça a l'air cool l'ambiance chez PHP, dis donc… grin
Dommage par contre qu'il n'y ait pas d'exemple concret pour assurer la véracité des faits
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

584

La première citation, c'est un commentaire d'un utilisateur dans un blog, donc invérifiable.

Par contre, la seconde, ça vient d'un mec qui bossait officiellement sur la sécurité de PHP, avant qu'il jette l'éponge en décembre 2006. Et apparemment il est plutôt reconnu, donc j'imagine qu'il sait de quoi il parle tongue

Espérons que ~8 ans plus tard, il y ait du mieux ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

585

Pas de rapport avec les langages, mais deux trucs que j'ai trouvés sympas :

http://corte.si/posts/visualisation/entropy/index.html

http://kevinbeason.com/smallpt/
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

586

Zerosquare (./584) :
Espérons que ~8 ans plus tard, il y ait du mieux ^^

Vu que l'équipe est toujours fondamentalement la même, j'ai des doutes.
PHP a toujours été un genre de gruyère de toutes façons. Il y a des trous, parfois un peu de moisi, mais dans l'ensemble t'arrives à en faire des trucs. Mais c'est normal, ça n'a jamais été conçu pour ce à quoi c'est utilisé. Au départ, c'est « Personal Home Page » et la sécurité pour ta page web où t'as la poire de tes gosses et des photos de ta maison, c'est très secondaire.
Le souci, c'est que ça soit utilisé pour plus.

587

Oui enfin, ça fait bien longtemps que ça n'est plus un langage bricolé par un mec dans son coin, et qu'il y a une entreprise commerciale qui s'en occupe à plein temps...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

588

C'est bien pour ça que la qualité a baissé. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

589

Le truc c'est que tu peux avoir la meilleure entreprise de construction qui soit, quand tu construis sur une fondation bâclée, tu gardes un résultat médiocre.
C'est typiquement le problème de PHP d'ailleurs. Regarde juste l'incohérence des API due à la rétrocompatibilité avec des modules faits à la va vite il y a 15 ans. Il est probable que ce soit le même bordel à l'intérieur car, si mes souvenirs sont bons, le moteur PHP n'a jamais été réécrit from scratch.

Juste quelques exemples :
  • mysql_escape_string euuhh... non en fait mysql_real_escape_string, parce que la première est buggée et n'est gardée que pour le code legacy.
  • strpos mais str_rot13. Conventions de nommage ?
  • array_map($callback, înput) mais array_filter($input, $callback). D'ailleurs tant qu'on est là, t'as à peu près la moitié des fonctions de tableau qui commencent par array_. Les autres non. Parce que.
  • On parlait du fameux opérateur == qu'il ne faut officiellement pas utiliser, mais lui préférer ===, sinon on crée des bugs bizarres et difficiles à débugger. Par exemple : TRUE == "truc" et "truc" == 0 mais TRUE != 0. L'opérateur de comparaison n'est pas transitif !
  • Encore un autre avec ==, en PHP, "32k43d21fg" == "32z12xxx". En revanche, "032" != 032.
  • Sur les types encore: 012 == 10, normal. Mais alors pourquoi 08 === 0 alors que 0a génère une erreur ?
  • On rejoue ? 0b0+1 === 2. Oui monsieur.
  • On rejoue avec les comparaisons ? L'opérateur === fonctionne différemment selon le type. Pour les objets, il compare l'identité de l'objet. Alors que pour les autres types il compare la valeur. Si tu veux comparer le type et la valeur, tu est obligé de faire ça : (is_object(a) || is_object(b) ? a == b : a === b)
  • les conversions en (int) alors que le langage n'as pas de type int.
  • Le typage dynamique n'est pas spécifié. D'ailleurs la conversion de type que tu obtiens avec certains opérateurs a changé d'une version à l'autre du moteur.
  • Le comportement de certaines API dépend des options de compilation de PHP. Concrètement ça veut dire que pour savoir ce que fait un bout de code, tu dois aller consulter les options de compilation utilisées pour ton binaire de PHP.
  • json_decode retourne le même résultat quand il rencontre une erreur que quand tu lui passes une donnée valide qui vaut null.
  • strpos peut renvoyer 0 ou false, ce qui est une invitation au bug (if strpos()...)
  • Saviez-vous que NULL == 0 et NULL < -1
  • En PHP, "10" < "011". Il n'existe aucun moyen de le forcer à comparer les chaînes, il faut ajouter un caracatère en début de chaîne avant la comparaison pour contourner le problème : ("x" . A < "x" . B).
  • PHP est sensible à la casse… mais pas trop. Les variables le sont, les fonctions ne le sont pas. Pourquoi ?
  • Certaines exceptions ne peuvent pas être interceptées par un try catch. Par exemple new ClasseInexistante() tue le programme, même dans un bloc try catch.
  • Il y a des circonstances où une erreur les paramètres du constructeur provoque l'invocation du destructeur. Toujours pas compris ni pourquoi ni comment. Depuis j'ai mis à jour mon PHP et ça ne le fait plus. Ça restera un grand mystère.
  • Il y a un is_a et un instanceof (on note la naming convention une fois encore). J'ai toujours pas compris la différence exacte, mais ils ne font pas exactement la même chose. Oh et tu ne peux utiliser ni l'un ni l'autre pour tester si une variable est un entier. Pour ça il faut utiliser is_int.
  • Dans le même registre, get_class($truc) renvoie le nom de la classe de $truc. Sauf si $truc est null. Dans ce cas ça fait quoi ? La réponse est drole, je vous laisse lire la doc.


C'est juste quelques exemples que j'avais noté à l'époque tellement ça me gonflait. Parce que les comparaisons et les chaînes en particulier m'ont bien saoulé à l'époque où je faisais des trucs avec PHP. Mais quand je vois comme c'est le bordel juste pour manipuler quelques chaînes dans un addon, j'ose pas imaginer ce que c'est quand tu commences à utiliser des modules plus compliqués. Tiens par exemple mysql, faut utiliser lequel des modules officiels intégrés à PHP ? mysql ? mysqli ? PDO ? Pourquoi il y a 3 modules officiels pour la même fonctionnalité ?

590

Zerosquare (./587) :
Oui enfin, ça fait bien longtemps que ça n'est plus un langage bricolé par un mec dans son coin, et qu'il y a une entreprise commerciale qui s'en occupe à plein temps...

Tiens excellent exemple de non-bricolage. http://www.exploit-db.com/exploits/18665/
PHP version 5.4 prend le contenu de l'en-tête Content-Length de la requête HTTP et alloue cette quantité de mémoire sans faire la moindre vérification. Ça permet de planter tout serveur qui exécute PHP5.4 simplement en envoyant un Content-Length énorme.

Le bug a été corrigé depuis, mais le fait d'écrire un code qui alloue sans vérification de la mémoire spécifiée par une entrée externe est tellement une erreur de débutant que c'est vraiment pas rassurant pour le reste. Que ce code ait en plus survécu et passé toutes les barrières jusqu'à être inclus dans une release, c'est carrément flippant.

Bref, on nage toujours dans l'amateurisme visiblement. Ou alors la super entreprise commerciale fait du dev comme toutes les entreprises commerciales : c'est les stagiaires qui bossent sur le code.

591

spectras (./589) :
Mais quand je vois comme c'est le bordel juste pour manipuler quelques chaînes dans un addon, j'ose pas imaginer ce que c'est quand tu commences à utiliser des modules plus compliqués.

Assez étrangement, quand tu commences à avoir suffisamment d'XP et d'habitude de manipuler le truc, tu finis par savoir quoi utiliser ou non et dans quels cas -- comme avec n'importe quel langage et/ou techno, j'imagine, en fait wink

Il y a effectivement dans ta liste quelques points qui sont surprenants pour quelqu'un qui découvre PHP après être venu d'un autre langage -- mais, en même temps, ces autres langages auront d'autres points qui paraitront surprenant à quelqu'un venant d'encore d'autres.

PHP a aussi l'inconvénient -- ou l'avantage -- d'être un langage avec une histoire, un langage qui n'a pas été "conçu" comme "un langage" mais plus comme un ensemble de scripts et de fonctions "utilitaires".
D'un autre côté, ça fait aussi partie des raisons qui l'ont amené à sa place sur le web wink

La question de corriger ou pas les trucs un peu surprenants revient fréquemment (les nommages de fonctions, l'ordre des needle/haystack, le typages plus ou moins souples/strict, ...) ; mais modifier tout ça apporterait quoi ? Quelques surprises en moins pour les débutants, ok. Et scier la branche sur laquelle se reposent tous les logiciels existant aujourd'hui. En somme, pour essayer d'arriver à un langage parfait, il faudrait repartir from scratch. Quel intérêt ? Alors que d'autres langages sortent déjà à peu près tous les jours "from scratch" ?
Après, sans aller jusque tout chambouler, les choses évoluent doucement avec chaque nouvelle version : la difficulté est de trouver un juste milieu entre le langage souple et accessible qu'est historiquement PHP et le langage strict que certains voudraient qu'ils deviennent.

Je n'ai pas le courage de répondre point par point, désolé.
En les lisant, ceci dit, il y en a quelques uns qui sont effectivement... surprenants -- y compris pour moi qui fais du PHP à peu près tous les jours. Peut-être parce que, comme avec n'importe quel langage, on finit par savoir quoi utiliser ou non une fois qu'on a pris l'habitude de le manipuler wink
(j'ai à l'esprit la photo qui montre la différence de taille entre le bouquin "javascript, the good parts" et un autre du style "tout javascript" : on doit pouvoir dresser ce type de comparaison avec n'importe quel langage ^^ )
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

592

squale92 (./591) :
En les lisant, ceci dit, il y en a quelques uns qui sont effectivement... surprenants -- y compris pour moi qui fais du PHP à peu près tous les jours. Peut-être parce que, comme avec n'importe quel langage, on finit par savoir quoi utiliser ou non une fois qu'on a pris l'habitude de le manipuler wink.gif?33

Je lis souvent cet argument sous différentes formes (« il n'y a pas de mauvais langage, c'est simplement qu'on ne sait pas l'utiliser », « c'est simplement parce qu'il faut le connaître », etc.)
Je trouve ça bizarre, ça revient à dire qu'aucun langage ne peut être mauvais. Dans ce cas, le Ook et le Brainfuck sont de bons langages, c'est simplement qu'on ne sait pas les utiliser ?

Je trouve également que ça revient à dire que comme on peut enfoncer un clou avec une pierre, une pierre constitue un marteau tout à fait valable. N'importe quel bricoleur choisira pourtant le marteau embarrassed

Accessoirement, c'est un argument que je n'entends que de la part de gens qui font du JS ou du PHP hehe Et curieusement, je ne connais personne qui ait fait la transition Python/Ruby -> PHP, alors que j'en connais pas mal qui ont fait la transition PHP -> Python/Ruby.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

593

flanker (./592) :
Je lis souvent cet argument sous différentes formes (« il n'y a pas de mauvais langage, c'est simplement qu'on ne sait pas l'utiliser », « c'est simplement parce qu'il faut le connaître », etc.)
Je trouve ça bizarre, ça revient à dire qu'aucun langage ne peut être mauvais. Dans ce cas, le Ook et le Brainfuck sont de bons langages, c'est simplement qu'on ne sait pas les utiliser ?

Je trouve également que ça revient à dire que comme on peut enfoncer un clou avec une pierre, une pierre constitue un marteau tout à fait valable. N'importe quel bricoleur choisira pourtant le marteau embarrassed
pencil
C'est pas parce qu'on peut s'habituer à tout, y compris des mauvaises solutions, que ça fait d'une mauvaise solution une solution comme les autres. smile
C'est un peu comme souvent, en France, les gens ont tendance à te proposer une "solution de contournement", et tu vois bien souvent des gens s'habituer (voire être content) à leur contournement plutôt qu'à demander une vraie solution.
(Et perso d'ailleurs ça m'agace vraiment de parler de "solution" quand on parle d'un "contournement" mais c'est un sujet sans rapport avec la disucssion)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

594

flanker (./592) :
Je trouve ça bizarre, ça revient à dire qu'aucun langage ne peut être mauvais. Dans ce cas, le Ook et le Brainfuck sont de bons langages, c'est simplement qu'on ne sait pas les utiliser ?

roll
flanker (./592) :
Et curieusement, je ne connais personne qui ait fait la transition Python/Ruby -> PHP, alors que j'en connais pas mal qui ont fait la transition PHP -> Python/Ruby

Je fais moi-même cette "transition" (PHP -> Ruby) depuis quelques temps ; enfin, occasionnellement je fais du Ruby et j'en suis encore clairement à l'étape "débutant", mais je suis amené à en faire de plus en plus souvent, que ce soit pour en écrire, pour en lire, en comprendre ou en commenter, voire même participer à des choix d'archi plus ou moins importants.

Chaque fois que j'en fais, je ne peux pas m'empêcher de trouver le langage "surprenant" et de me dire que je serais vachement plus efficace en PHP ou que j'ai l'impression d'écrire (ou d'essayer de lire) du Perl... de la même façon que d'autres trouvent PHP "surprenant", j'imagine, ou que j'ai grogné la dernière fois qu'il a fallu que je lise et comprenne du Python.
Je ne me fais pas (plus, en fait) ce type de réflexion lorsque je fais du C ou du Java... Alors que je me la suis faite un paquet de fois dans le passé ^^

Du coup, je me dis que si les bases de C et de Java sont plus ou moins rentrées, Ruby rentrera aussi, à force d'en faire -- de la même façon que j'en suis venu à être à l'aise avec PHP ou que d'autres sont tombés amoureux de JS (qui, eux aussi, ne se gènent pas pour taper sur Java ou PHP selon l'humeur du jour ^^).
GoldenCrystal (./593) :
C'est pas parce qu'on peut s'habituer à tout, y compris des mauvaises solutions, que ça fait d'une mauvaise solution une solution comme les autres. smile.gif?33

Voyant ce qui est faisable avec PHP/Ruby/Java/Go/JS/C/autres (notez qu'il y en a plusieurs là-dedans avec lesquels je ne suis pas à l'aise et que je dois pourtant manipuler à l'occasion) une fois qu'on les connait un peu, j'ai de plus en plus de mal à parler de "mauvaise solution" de manière complètement généraliste, je dois avouer...

Et pourtant, des idées comme le "simple" fait (évident d'après certains) de devoir redémarrer le serveur d'application, ou devoir compiler ton code en un binaire avant de le déployer (pas forcément toujours évident à automatiser quand la moitié de ton équipe a des machines bizarres), là comme ça, ça me semble tellement pas orienté "bonne solution" ^^
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

595

Bon, ça fait 2 fois que je vais pour poster et que Chromium crashe et perd le post.
Je fais court du coup.

Le problème de PHP, c'est que il respire l'amateurisme. Il y a même des putains d'easter eggs qu'il met automatiquement sur tes sites. Quel autre langage fait ça sérieux ?

Démonstration: http://www.websitebakery.com/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
Ce site utilise PHP 5.2. Tu le sais parce que en plus l'image change à chaque release.

Merde quoi. Et tu ne peux pas le désactiver. Le seul et unique moyen de virer ça, c'est de patcher le source et recompiler ton moteur PHP à la main. Vous êtes sérieux ?


Mais même pour revenir à ma petite liste là haut. C'est juste la liste des problèmes que j'ai eu moi, personnellement. On peut trouver des listes longues comme le bras, qui font bien 10x la taille de toute ce que tu trouveras pour n'importe quel autre langage.
Et puis des trucs basiques quoi merde. Je sais qu'on peut s'habituer à tout, mais ça n'en fait pas un bon design.

La comparaison non transitive ? Sérieux, c'est la base. Si A=B et B=C, alors A=C. Ben non, pas en PHP.
L'impossibilité de comparer de manière prévisible deux variables ?
Le fait que des fonctions se comportent différemment en fonction de l'endroit d'où tu les appelles. Si ça c'est pas tordu, je vois pas quoi.
echo(intval(9999999999)) => affiche "2147483647". Ne génère aucun warning, tout va bien.

Juste regarde moi ça http://php.net/manual/en/array.sorting.php Dis moi si honnêtement c'est pas complètement foireux. Lis les commentaires aussi, c'est très drôle. Et même dans la doc des fonctions de tri c'est écrit « Be careful when sorting arrays with mixed types values because sort() can produce unpredictable results ». NON ! NON ! NON !

Mais chaque page de la doc tu retrouves le même genre de trucs, et chaque page de la doc, tu trouves une liste de commentaire détaillant comment contourner les bugs et les incohérences de la fonction.

Regarde ça, trouvé dans un commentaire expliquant comment contourner les incohérences de l'opérateur < :
function compare($a, $b) {
    if (is_object($a) || is_object($b) {
        if ($a == $b) { return 0; }
    } else {
        if (is_string($a) && is_string($b) {
            $a = 'x' . $a;
            $b = 'x' . $b;
        }
        if ($a === $b) { return 0; }
    }
    if (is_null($a)) {
        return -1;
    }
    if (is_null($b) {
        return +1;
    }
    return $a < $b ? +1 : -1;
}

Et encore, les commentaires suivant lui indiquent qu'il y a des cas qui ne sont toujours pas bien gérés par sa fonction. C'est juste indémerdable comme truc. Pour une simple comparaison.

Sur des langages comme JS il y a plein de merdes, mais l'usage de JSlint permet quand même de s'assurer que tu tombes pas trop dessus. Le truc avec PHP, c'est que tu es obligé de tomber dessus. L'équivalent, un PHPlint, ne pourrait pas lever une erreur à chaque fois que tu fais un ==, un ===, un < ou un >. Enfin il pourrait, mais comme tu peux pas faire autrement...

596

Tiens je viens d'en trouver un autre rigolo, justement en lisant la doc des fonctions de tableau.
in_array("foobar", array(0)) === true
PHP a une énorme tendance au gros random des familles ^^

597

(C'est vraiment ignoble sick)

598

Non c'est un putain d'horrible language de pervers
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

599

spectras (./595) :
Démonstration: http://www.websitebakery.com/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
Ce site utilise PHP 5.2. Tu le sais parce que en plus l'image change à chaque release.
Merde quoi. Et tu ne peux pas le désactiver. Le seul et unique moyen de virer ça, c'est de patcher le source et recompiler ton moteur PHP à la main. Vous êtes sérieux ?

Si, tu pouvais le désactiver, en désactivant la directive expose_php -- qui désactive aussi le renvoi de la version de PHP en en-tête HTTP de réponse (si expose_php est activé, pas besoin d'aller se fatiguer à chercher les identifiants de logo, suffit de regarder les en-têtes HTTP, comme pour pas mal de langages/outils).
D'ailleurs, le meilleur moyen de virer ça (et pas que ça), c'est d'utiliser une version à jour de PHP : ça a été supprimé en PHP 5.4 il me semble (et les versions précédentes ne sont plus maintenues).
spectras (./595) :
Je sais qu'on peut s'habituer à tout, mais ça n'en fait pas un bon design.

J'ai jamais non plus parlé d'un bon design, hein : c'est pas la façon d'être de PHP, puisque le langage n'a pas tellement été "designé" en soit (oui, contrairement à d'autres, qui peuvent donc être "mieux désignés", ils auront pas de mal).
Je n'ai jamais entendu un mainteneur (surtout parmi les mainteneurs "historiques" ou même le créateur de départ) de PHP prétendre que le langage ait été "désigné", mais plus qu'il avait juste évolué pour répondre aux besoins de ses utilisateurs -- et que ça lui a plutôt bien réussi comme ça.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

600

Respect, pas garantir le résultat d'une opération sur un ordinateur, et c'est du langage de 'haut niveau'....

GT //////
avatar
je sais pas depuis que Fadest nous mets de la zik partout dans ses jeux l'univers a été ebranlé (LordKraken)