Maison >développement back-end >tutoriel php >Comment résoudre l'exception « La sérialisation de la fermeture n'est pas autorisée » dans les tests unitaires Zend Mail ?

Comment résoudre l'exception « La sérialisation de la fermeture n'est pas autorisée » dans les tests unitaires Zend Mail ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 03:04:29268parcourir

How to Resolve

Exception : la sérialisation de 'Closure' n'est pas autorisée

Lors de l'exécution de tests impliquant des fonctions de fermeture dans la méthode _initMailer de Zend, les développeurs peuvent rencontrer le exception suivante : Exception : la sérialisation de « Closure » ​​n'est pas autorisée.

Cette erreur survient car les fonctions anonymes ne peuvent pas être sérialisées en raison de leur nature dynamique. Dans le code fourni, la fermeture est définie dans la méthode _initMailer :

$callback = function()
{
    return 'ZendMail_' . microtime(true) .'.tmp';
};

Solution :

Il existe deux solutions viables à ce problème :

Solution 1 : Remplacer par une fonction normale

Convertir la fermeture en fonction normale en dehors de la méthode _initMailer :

function emailCallback() {
    return 'ZendMail_' . microtime(true) . '.tmp';
}
$callback = "emailCallback";

Solution 2 : Indirect Appel de méthode par variable de tableau

Selon la documentation Zend Mail File Transport, l'option de rappel peut également être définie à l'aide d'une variable de tableau :

$callback = array($this, "aMethodInYourClass");

Cette approche permet de transmettre n'importe quel méthode de la classe actuelle comme rappel.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn