Maison  >  Article  >  développement back-end  >  Comment résoudre l'erreur « Exception : la sérialisation de « Closure » ​​n'est pas autorisée » lors de l'utilisation de fermetures dans les méthodes de test ?

Comment résoudre l'erreur « Exception : la sérialisation de « Closure » ​​n'est pas autorisée » lors de l'utilisation de fermetures dans les méthodes de test ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 01:28:02436parcourir

How to Resolve

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!

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