Utiliser une variable globale avec une closure ferait sournoisement planter PHP

Après 3 heures à m'arracher les cheveux (que je n'ai plus nombreux d'ailleurs) sur un étrange bug qui faisait planter PHP 5.3.6 de façon sournoise et mystérieuse, je viens enfin de trouver le code fautif : une variable globale utilisée par une closure.

Voici le code responsable de tout ce temps perdu :

<?php

global $core;

Events::attach
(
    null, get_class($operation) . '::process'function(Event $event, Operation $operation) use ($record$form$core)
    {
    }
)

Voilà, trois lignes de code qui plantent mystérieusement PHP.

Cela se manifeste par une réinitialisation de la connexion (selon Firefox). En fait cela semble poser problème au tampon de sortie, puisque si je mets un flush(); exit(); à la de fin de mon script on y voit que du feu. Encore plus étrange le flush() ET le exit() sont nécessaires.

Pour remédier au problème il suffit de retirer la propriété globale du use() et de l'utiliser en global comme d'hab.

Laisser un commentaire

Pas de commentaire