mageekblog - Mot-clé - __invoke - 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:26874ca5b8cd4cac8d08b0e68e64f63aDotclearMort de PHP6 + 210 jours - Yannick K.urn:md5:c9d9d5df3e743d64984120f62cb802a72010-10-21T14:21:11+02:002010-10-21T23:13:15+02:00Yannick K.<p>Merci pour ce résumé.</p>Mort de PHP6 + 210 jours - Guileurn:md5:2a0e2b1fada7742473aa8a170c7886642010-10-12T10:41:19+02:002010-10-12T10:43:31+02:00Guile<p>@usul Tout à fait! Et ces interfaces sont réellement les bienvenues pour leur usage.<br />
En ce qui concerne l'interface \Comparable, je la trouve légèrement abusée.<br />
Pourquoi ne pas utiliser implicitement la méthode compareTo() quand elle existe lors d'une comparaison?<br />
Il faut également savoir que je me retiens de troller sur la surcharge d'opérateur...</p>Mort de PHP6 + 210 jours - usulurn:md5:106e3ae90619ac4211a47a9c57247f8e2010-10-12T08:57:54+02:002010-10-12T09:17:53+02:00usul<p>@Guile c'est pas faux ce que tu dis mais on a quand même pas mal d'interfaces dans la SPL non ?</p>Mort de PHP6 + 210 jours - Julien BREUXurn:md5:357b00c1a48116fddfd63248c2d7cbf92010-10-11T22:57:16+02:002010-10-11T22:05:53+02:00Julien BREUX<p>Un billet bien écrit mérite un MERCI <img src="/themes/default/smilies/smile.png" alt=":-)" class="smiley" /></p>Mort de PHP6 + 210 jours - mageekguyurn:md5:f058579f418efd91b36ded515438aa762010-10-11T17:39:14+02:002010-10-11T16:39:41+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2010/10/11/Mort-de-PHP6-210-jours#c2043" rel="nofollow">Guile</a> : La vraie question est "Qui est le capitaine ?"...</p>Mort de PHP6 + 210 jours - Guileurn:md5:d629711196f2f28834619a856f3e5bab2010-10-11T17:37:47+02:002010-10-11T16:38:59+02:00Guile<p>Ce qui me fait rire à chaque fois en lisant ta très bonne chronique, c'est que j'ai l'impression d'assister à un débat politique : tout le monde expose ses arguments, mais aucune conclusion n'est tenue.</p>
<p>Tous les points abordés sont légitimes, intéressants, etc. Mais il y a toujours une poignée de personnes pour dire non. Résultat : ça n'avance pas.</p>
<p>En ce qui concerne la surcharge d'opérateur avec l'interface \Comparable, je vois qu'ils ont hésité entre le Java-like (interface) et le Python-like (magic method <strong>cmp</strong>).</p>
<p>On va une nouvelle fois voir une incohérence de langage. On a pléthore de méthode magique, et ce coup-ci on part sur une interface à implémenter... C'est peut-être une réponse à la question "pourquoi PHP est-il autant incohérent?" Parce que les développeurs piochent leurs idées dans des langages différents.</p>
<p>J'ai l'impression de regarder un équipage dans un bateau, les voiles sont déployées, mais... il fait quoi le capitaine?</p>PHP manque de plus en plus de cohérence - metagotourn:md5:f0e50452fd7c6df5128f1e49914ee8982010-08-20T00:05:08+02:002010-08-20T09:04:15+02:00metagoto<p>@Pierre<br />
Plusieurs raisons: le déréférençage n'est pas systématique, les opérateurs "->" et "()" n'ont pas de réels status d'opérateurs. Par exemple on peut faire ()-> et tout récemment ()[] (array subscript, pas sûr que ça passe dans les commentaires), mais beaucoup d'autres combinaisons aux apparences tout à fait classiques sont interdites: (exp)(), (exp)->, ()++ etc.<br />
En parallèle, il y a l'usage des {exp} pour les variables variables. exp doit être castable en string.<br />
Cela fait deux catégories d'expressions dont il faut connaitre les domaines d'applications et les limitations.. et les workarounds.<br />
Boutade trollesque: Quand je fais du php, je me mets en mode "curly braces" (js, perl, C..). Puis je me mets en mode dégradé php <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>PHP manque de plus en plus de cohérence - Guileurn:md5:4547ea99c39e4af7b076d4f475a448cc2010-08-19T17:23:42+02:002010-08-19T17:03:48+02:00Guile<p>Petite relecture : "Il semble en effet que les développeurs de PHP n'est pas eu conscience" il faudrait écrire "Il semble en effet que les développeurs de PHP n'aient pas eu conscience"</p>
<p>Pour continuer d'utiliser __invoke() de façon presque magique, le code suivante fonctionnerait-il ?</p>
<pre> public function writeFoo()
{
$appel = $this->foo;
$appel();
return $this;
}</pre>PHP manque de plus en plus de cohérence - Denisurn:md5:a999997a1d380e63515955ae24162f5b2010-08-19T08:25:11+02:002010-08-19T07:32:22+02:00Denis<p>Oui, en effet... ces méthodes "magiques" ont de quoi sérieusement nous interroger !</p>PHP manque de plus en plus de cohérence - Pierreurn:md5:4d010508fc721a940d7896a9203c134e2010-08-19T01:37:43+02:002010-08-19T07:32:22+02:00Pierre<p>@metagoto</p>
<p>Manque de coherences avec les ({})<a href="http://blog.mageekbox.net/?post/2010/08/18/" rel="nofollow"></a>? Exemples?</p>PHP manque de plus en plus de cohérence - Yacodourn:md5:efe7d4f6390d5a9a152f7a051a46f2ca2010-08-19T00:54:40+02:002010-08-19T07:32:22+02:00Yacodo<p>Vu que je t'ai remonté ce dysfonctionnement il est tout naturel que je viennent donné mon avis.</p>
<p>L'utilisation d'__invoke est très déroutant en PHP mais si ça permet de faire gagner du temps dans le développement pourquoi s'en privé ?<br />
Pour ma part je n'en ai trouvé l'utilité, pour le moment, que pour un registre :<br />
<?php<br />
$registry = Registry::getInstance();<br />
$registry('foo', 'bar'); // set array(..., 'foo' => 'bar')<br />
echo $registry('foo'); // affiche bar</p>
<p>Le fonctionnement de celui-ci avant l'<strong>invoke() était inspiré du ZF : </strong>(set|get)(), je n'ai encore pas vu d'ide auto-complété ça, donc autant gagné un peu de temps (plus rapide à écrire "('xx')" avec l'ajout automatique du délimiteur de fermeture que "->xx", pour ma part).<br />
Après chacun développe et se simplifie la tâche comme il le souhaite.</p>
<p>Maintenant j'ai des objets dépendants de ce registre donc tout naturellement pour éviter d'avoir à stocker les valeurs dans des propriétés de l'objet je stocke directement l'instance et là c'est le drame.<br />
Le problème est vite réglé mais on s'attends à utiliser notre objet comme une fonction (<a href="http://www.php.net/manual/fr/language.oop5.magic.php#language.oop5.magic.invoke" title="http://www.php.net/manual/fr/language.oop5.magic.php#language.oop5.magic.invoke" rel="nofollow">http://www.php.net/manual/fr/langua...</a> @Pierre Tiens, ça c'est dans la doc et pourtant ça ne fonctionne pas) et si une méthode du même nom n'existe pas pourquoi ne pas utiliser la propriété, après le PHP Group n'a plus qu'a décider du moment où __call doit intervenir et le problème sera réglé car on peut se passer d'invoke, mais les closures je ne pense pas, pourtant c'est les mêmes mécanismes...</p>
<p>Donc certes c'est peu commun comme utilisation, mais ça suit parfaitement le concept DRY (Registry::getInstance() à chaque méthode dépendant d'une valeur c'est lourd...).</p>
<p>Wilfried</p>PHP manque de plus en plus de cohérence - metagotourn:md5:69b6c3ce08510fd06c30963f54c4462b2010-08-18T22:04:38+02:002010-08-18T22:06:55+02:00metagoto<p>A propos de l'absence de magie: la RFC mis en lien dans le billet montre assez clairement que le problème n'est pas simple à résoudre. En tout cas, c'est bien plus complexe que ce que l'on peut imaginer à première vue.</p>
<p>Pour moi, le truc le plus frustrant quant à un manque de cohérence dans php concerne les expressions. Les groupements et constructions de sous expressions avec des parenthèses (ou accolades) sont trop limités. Javascript est de ce coté là beaucoup plus en accord avec la philosophie/syntaxe de C que ne l'est php.</p>
<p>Pour les str*: RAS</p>PHP manque de plus en plus de cohérence - Sezaurn:md5:2a5dce496094026e8e350e730fc836dd2010-08-18T21:54:39+02:002010-08-18T22:06:55+02:00Seza<p>En effet le comportement de la communauté est déplorable. Depuis plusieurs années, je lis @internals, j'ai essayé plusieurs fois de lancer des idées et les réponses y ont été déconcertantes et fermées à tout avis d'utilisateurs à chaque fois.</p>
<p>Depuis 10 ans en gros que j'utilise PHP, je n'ai jamais pu lacher la documentation même pour la plus simple des fonctions (retourne t-elle false, null, 0, ou une erreur dans quel cas etc..., et les paramètres dans quels ordres heureusement l'ide aide bien), toujours le nez dedans, plus on avance dans le langage et plus on s'embrouille les neuronnes à savoir si tel syntaxe marche ou non au lieu de prendre confiance en soit et de s'affirmer dans le langage on est de plus en plus déstabilisé face à des cas ou la logique d'utilisation (comme les props d'un objet qui sont des closures) n'est pas respectée.<br />
Reste donc la possibilité de n'écrire que du code PHP basique sans cherché à poussé ou alors testé chaque ligne de code pour voir si la syntaxe est accepté et comprise.<br />
Bref PHP est un langage qui plus il évolue plus il devient fatiguant à utiliser. Je pense que c'est pour cela que la majorité des développement en PHP sont centrés sur des applications assez simple.</p>PHP manque de plus en plus de cohérence - mageekguyurn:md5:715c8ba4789080c78b32f4ba460b49df2010-08-18T21:39:48+02:002010-08-18T20:50:11+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2010/08/18/PHP-manque-de-plus-en-plus-de-coh%C3%A9rence#c1764" rel="nofollow">Pierre</a> : Rassures-toi, je ne trouve pas tes commentaires agressifs, et je suis blasé des commentaires considérés par d'autres comme agressif de la part de la communauté des développeurs de PHP.</p>
<p>Cependant, sur ce point précis, je ne parle pas uniquement en mon nom, car je sais que les réponses renvoyant vers la documentation sont perçues par la communauté des utilisateurs comme très désagréables, voir comme de la mauvaise foi, et c'est donc par rapport à cela que je t'ai répondu.</p>
<p>Et c'est bien parce que je te connais et que je sais ce que tu fais au niveau du PHP Group sur ce point que j'ai été surpris de ce RTFM, même si je suis parfaitement d'accord avec toi, il est pertinent dans la plus grande majorité des cas.</p>
<p>Pour en revenir au point qui nous occupe, si syntaxiquement, $bar->foo() est bien un appel à la méthode bar::foo(), sémantiquement, c'est tout autre chose, puisque $bar->foo est une propriété.</p>
<p>Et la situation commencera à devenir franchement cocasse, pour le moins, lorsqu'il sera possible d'appeler les fermetures et les fonctions anonymes via des propriétés.</p>
<p>Dans ce cas, $bar->closure() sera parfaitement fonctionnel et valide...</p>PHP manque de plus en plus de cohérence - Pierreurn:md5:256f6941ce09a40f3fae9df589767fa12010-08-18T19:56:00+02:002010-08-18T20:51:17+02:00Pierre<p>Sinon pour la transparence, j'approuve a 200% (et tu le sais je croie :).</p>PHP manque de plus en plus de cohérence - Pierreurn:md5:180773981bd14b28ac8d98c000abd1122010-08-18T19:55:12+02:002010-08-18T20:51:02+02:00Pierre<p>Il serait aussi bien que tu interprètes de manières moins agressive mes commentaires (ou les nôtres), en gardant en tête que nos réponses sont données sur notre temps libre et sont aussi respectueuses.</p>
<p>Renvoyer vers la doc est une bonne chose, de maniere generale, car 95% des questions y ont leur réponse.</p>PHP manque de plus en plus de cohérence - mageekguyurn:md5:12078341b7c5ea345e0d78b5dc4245462010-08-18T19:34:36+02:002010-08-18T18:40:14+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2010/08/18/PHP-manque-de-plus-en-plus-de-coh%C3%A9rence#c1761" rel="nofollow">Pierre</a> : J'ai bien conscience de la problématique technique sous-jacente.</p>
<p>Mais je pense que dire "Nous aimerions bien pouvoir faire ce que vous demandez, mais ce n'est pas possible car le moteur de PHP ne le permet pas" est beaucoup mieux que de dire "Read the fucking manual, ça marche comme ça doit marcher".</p>
<p>Question de sensibilité, certainement...</p>
<p>D'autant que dans ce cas précis, un appel explicite fonctionne.</p>
<p>C'est donc trés étrange comme comportement pour l'utilisateur qui n'est pas forcément au courant de la problématique technique qui se pose derrière ce qu'il veut.</p>
<p>Et on arrive finalement au nœud du problème à mon sens : si la communauté des développeurs, aka le PHP Group, avait une démarche plus ouverte et transparente vis à vis de ce genre de problèmes et des utilisateurs du langage, tout le monde s'en porterait beaucoup mieux.</p>PHP manque de plus en plus de cohérence - Pierreurn:md5:cb5ffdfcb56076f6e434fe494eb712112010-08-18T19:29:00+02:002010-08-18T18:33:58+02:00Pierre<p>Dire fonction ou méthode n'est pas jouer sur les mots, c'est appeler un chat un chat <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>PHP manque de plus en plus de cohérence - Pierreurn:md5:8b1965782ac19bd977340c5ec89224692010-08-18T19:28:20+02:002010-08-18T18:33:06+02:00Pierre<p>Ce n'est pas une incohérence et c'est documenté.</p>
<p> Il n'est pas possible de résoudre les conflits si les méthodes sont supportées.</p>
<p>Après, cela n'est peut être pas idéal ou ne pas vous plaire, mais cela ne change malheureusement pas grand chose.</p>PHP manque de plus en plus de cohérence - mageekguyurn:md5:5cb3a050a32c180428db4001c80b23662010-08-18T19:21:16+02:002010-08-18T18:26:50+02:00mageekguy<p>@<a href="http://blog.mageekbox.net/?post/2010/08/18/PHP-manque-de-plus-en-plus-de-coh%C3%A9rence#c1758" rel="nofollow">Pierre</a> : Mouais.</p>
<p>Ce genre d'argument est quelque peu <q>bidon</q> pour justifier cette incohérence, et c'est d'ailleurs une <q>ficelle</q> récurrente de la communauté des développeurs pour justifier ce genre de problèmes.</p>
<p>Dire <q>Ce n'est pas un problème car le comportement est cohérent avec la documentation</q> n'explique et ne justifie absolument rien, et je pense d'ailleurs que ce genre d'attitude est l'une des raisons de la mauvaise image des développeurs du langage parmi la communauté de ses utilisateurs.</p>
<p>D'autant que là, c'est vraiment jouer sur les mots...</p>