Exception : la sérialisation de « Closure » n'est pas autorisée
Lors de la tentative d'utilisation de fermetures dans les méthodes de test, une « Exception : sérialisation de » Une erreur "La fermeture n'est pas autorisée" peut se produire.
Problème
Le fragment de code ci-dessous utilise une fermeture pour spécifier un chemin de fichier personnalisé pour stocker les e-mails :
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... $callback = function() { return 'ZendMail_' . microtime(true) .'.tmp'; }; // ... }</code>
Résolution
Solution 1 : Remplacer la fermeture par une fonction régulière
Remplacer la fermeture par une fonction régulière :
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... function emailCallback() { return 'ZendMail_' . microtime(true) . '.tmp'; } $callback = "emailCallback"; // ... }</code>
Solution 2 : Utiliser une variable de tableau pour l'appel de méthode indirect
Utiliser une variable de tableau pour appeler une méthode indirectement :
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... $callback = array($this, "aMethodInYourClass"); // ... }</code>
Cela vous permet de définissez la méthode dans la classe et transmettez-la au rappel à l'aide d'un tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!