mageekblog - Naissance de PHP 5.4 - environs 90 jours - CommentairesLe blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.2021-12-02T08:20:54+01:00Frédéric Hardyurn:md5:26874ca5b8cd4cac8d08b0e68e64f63aDotclearNaissance de PHP 5.4 - environs 90 jours - artragisurn:md5:10f95510f19a5000801823557e7d5d772011-10-30T09:32:55+01:002011-10-30T11:19:23+01:00artragis<p>Salut, c'est tout nouveau, tout neuf, le bug que tu avais signalé (sous le numéro 55300) vient d'être corrigé par cataphract</p>Naissance de PHP 5.4 - environs 90 jours - mageekguyurn:md5:b7adac31729c7211409b282d03737cb52011-08-09T12:08:06+02:002011-08-09T11:08:37+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2011/08/03/Naissance-de-PHP-5.4-environs-90-jours#c3232" rel="nofollow">Renaud</a> : J'avais déjà fait remonter l'info vers @hhamon et @fabpot via twitter, mais l'initiative est bonne.</p>Naissance de PHP 5.4 - environs 90 jours - Renaudurn:md5:dd511217f62c22d419013f0e721370c82011-08-09T10:28:06+02:002011-08-09T11:07:47+02:00Renaud<p>Au lieu de parler, j'ai agi: <a href="https://github.com/symfony/symfony/issues/1925" title="https://github.com/symfony/symfony/issues/1925" rel="nofollow">https://github.com/symfony/symfony/...</a> <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>Naissance de PHP 5.4 - environs 90 jours - mageekguyurn:md5:c2a26bd1109ec7d24126e266a60509592011-08-09T10:20:17+02:002011-08-09T09:21:27+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2011/08/03/Naissance-de-PHP-5.4-environs-90-jours#c3229" rel="nofollow">Renaud</a> : Pour le savoir, il suffit d'aller voir le ticket de bug...</p>
<p>Et je ne suis de toute façon pas du tout certain que le comportement précédent soit un jour rétablie.</p>
<p>Il faudra je pense mettre le code à jour.</p>Naissance de PHP 5.4 - environs 90 jours - Renaudurn:md5:ed4aaf84ccae02b82c0e2d1a28d8ed2f2011-08-08T20:39:19+02:002011-08-09T09:20:48+02:00Renaud<p>Toujours pas réparé <img src="/themes/default/smilies/confused.png" alt=":-/" class="smiley" /></p>
<p>$ php -v<br />
PHP 5.4.0beta1-dev (cli) (built: Aug 8 2011 18:08:55)<br />
Copyright (c) 1997-2011 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies</p>
<p>php ./app/console<br />
[LogicException]<br />
In the constructor of Symfony\Component\Finder\SplFileInfo, parent::__construct() must be called and its exceptions cannot be cleared</p>Naissance de PHP 5.4 - environs 90 jours - Jubianchiurn:md5:a1a3782ae5b396f4530e6489ea60c4512011-08-05T20:09:38+02:002011-08-05T21:38:41+02:00Jubianchi<p>@mageekguy : je ne veux pas lancé un débat sans fin ou vexer qui que ce soit mais (a mon avis) :<br />
- c'est justement parce que je ne sais pas ce que fait le constructeur que je l'appelle.<br />
- combien de classe sont écrites de manière à vérifier à chaque utilisation que leur initialisation et complètement faite ?<br />
- si une classe mère me force à appeler son custructeur lors de l'instanciation d'une de ses filles, c'est que celle-ci est mal écrite/mal conçue ?<br />
<br />
Personnelement je pense que l'appel explicite est plus "propre", plus lisible mais je me trompe peut être d'où mes questions...</p>Naissance de PHP 5.4 - environs 90 jours - mageekguyurn:md5:33173e6efecd31ba6e000e526216c4bd2011-08-05T16:30:17+02:002011-08-05T15:33:15+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2011/08/03/Naissance-de-PHP-5.4-environs-90-jours#c3225" rel="nofollow">Jubianchi</a> : Sauf que tu n'es pas censé savoir ce que fait le constructeur parent techniquement parlant.</p>
<p>C'est donc à la classe mère de gérer correctement le cas ou elle n'est pas instanciée correctement, et elle n'a pas à forcer le développeur à l'utiliser d'une quelconque manière.</p>Naissance de PHP 5.4 - environs 90 jours - Jubianchiurn:md5:c5d841746907cbdd406cb391b5cca65b2011-08-05T13:33:29+02:002011-08-05T15:33:15+02:00Jubianchi<p>@mageekguy : je suis complètement d'accord avec cette remarque : en PHP ce n'est pas une règle absolue mais pour moi cette possibilité reste une facilité de programmation.<br />
Si nous étions dans un langage ou le constructeur de la classe racine gère, par exemple, l'allocation des ressources système, il serait dangereux de ne pas appeler explicitement le constructeur parent, de le courcircuiter ou de déporter l'appel dans une autre méthode.</p>Naissance de PHP 5.4 - environs 90 jours - mageekguyurn:md5:f8de035eb14b36d1a3805a54b183a9182011-08-04T10:20:01+02:002011-08-04T09:23:37+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2011/08/03/Naissance-de-PHP-5.4-environs-90-jours#c3222" rel="nofollow">jubianchi</a> : Ce n'est pas forcément une erreur de programmation.</p>
<p>Dans le cadre de tests unitaires, tu peux vouloir mocker une classe afin de court-circuiter son constructeur, parce que, par exemple, il se connecte à une base de données, ou demande, comme celui de \DirectoryIterator, un chemin d'accès à un répertoire existant sur le système de fichiers, et tu peux vouloir rendre tes tests indépendant de cette base ou du système de fichier.</p>
<p>De plus, tu peux également vouloir déporter dans une autre méthode l'initialisation de l'objet, pour une raison ou une autre.</p>
<p>Appeler le constructeur parent est plus une bonne pratique générale qu'une règle absolue.</p>Naissance de PHP 5.4 - environs 90 jours - jubianchiurn:md5:93f7ec2a0e423196de7d101d69edac6c2011-08-04T09:29:24+02:002011-08-04T09:19:57+02:00jubianchi<p>Bonjour à tous!</p>
<p>Encore une fois, merci @mageekguy pour ce billet très intéressant!</p>
<p>Concernant le "bug" du constructeur cité dans ce billet, ce comportement pose effectivement quelques problèmes de compatibilité (qui ne sont pas documentés) mais (arrêtez moi si je me trompe) l'appel implicite à un constructeur parent ou le non-appel au constructeur parent est une erreur de code : dans la logique c'est à l'auteur de la classe fille de géré cet appel explicitement car sinon, l'initialisation n'est pas complètement faite (le code du constructeur parent n'est pas exécuté).</p>
<p>Je pense donc qu'il y a des erreurs de code dans certains framework ou autres scripts qui devraient être corrigées par leurs auteurs mais l'équipe de dév de PHP aurait également du documenter cette cassure de compatibilité.</p>Naissance de PHP 5.4 - environs 90 jours - mageekguyurn:md5:2ad442cf6cebabf1a437001418ac7ac72011-08-04T09:04:33+02:002011-08-04T08:06:27+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2011/08/03/Naissance-de-PHP-5.4-environs-90-jours#c3220" rel="nofollow">Ivan Enderlin</a> : Qu'on est trouvé ou non une solution (je n'ai pas encore testé) n'est pas vraiment la question.</p>
<p>Le problème est qu'il s'agit d'une cassure de compatibilité non documentée qui semble avoir un impact beaucoup plus important que prévu.</p>
<p>J'ai déjà pris les contacts nécessaire sur IRC pour relancer la discussion.</p>Naissance de PHP 5.4 - environs 90 jours - Ivan Enderlinurn:md5:121301cdbd1cb0fea6c0479513c59e9a2011-08-04T09:00:29+02:002011-08-04T08:06:35+02:00Ivan Enderlin<p>Hey :-),</p>
<p>À noter que le dépôt Mercurial existe aussi (<a href="http://hg.php.net/" title="http://hg.php.net/" rel="nofollow">http://hg.php.net/</a>), tu ne le soulignes pas assez ;-).</p>
<p>Pour ton bug, la discussion s'est terminée sur le fait qu'on pouvait capturer cette exception dans le constructeur et que le problème était résolu. Non ? J'étais là lors du débat mais il a duré plusieurs heures et quelques choses a pu m'échapper. Tout du moins, tu devrais peut-être relancer sur internals histoire de clarifier les choses car ton sujet n'a pas été repris.</p>Naissance de PHP 5.4 - environs 90 jours - mageekguyurn:md5:eab291f5ffc8db6657864417cb8f9caa2011-08-04T08:46:39+02:002011-08-04T07:58:53+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2011/08/03/Naissance-de-PHP-5.4-environs-90-jours#c3218" rel="nofollow">Renaud</a> : Tu penses bien. J'ai pas mal discuté sur IRC avec l'auteur de la modification, et j'ai même porté le débat sur internals@, mais pour l'instant, je n'ai pas réussi à me faire entendre, malheureusement.</p>
<p>Du coup, je suis preneur de toutes informations relatives à ce <q>problème</q> dans le cadre de SF2.</p>
<p>Et après avoir constaté par moi-même le problème, j'ai mis à jour le rapport de bug en conséquence.</p>Naissance de PHP 5.4 - environs 90 jours - Renaudurn:md5:af3d45ec3e12210a5fa8500b147c262b2011-08-04T08:31:18+02:002011-08-04T07:46:34+02:00Renaud<p>Ah ben c'est donc ça que j'ai comme erreur quand je lance n'importe quelle commande symfony 2.</p>
<p>Les commentaires de ton rapports de bug font penser qu'ils n'ont pas envie de corriger, non ?</p>