ホームページ  >  記事  >  バックエンド開発  >  Zend メール単体テストの「「クロージャ」のシリアル化は許可されていません」という例外を解決する方法

Zend メール単体テストの「「クロージャ」のシリアル化は許可されていません」という例外を解決する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 03:04:29193ブラウズ

How to Resolve

例外: 'Closure' のシリアル化は許可されていません

Zend の _initMailer メソッドでクロージャー関数を含むテストを実行すると、開発者は次の例外: 例外: 'Closure' のシリアル化は許可されていません。

このエラーは、匿名関数はその動的性質によりシリアル化できないために発生します。提供されたコードでは、クロージャは _initMailer メソッド内で定義されています:

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

解決策:

この問題には 2 つの実行可能な解決策があります:

解決策 1: 通常の関数に置き換えます

クロージャを _initMailer メソッドの外側の通常の関数に変換します:

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

解決策 2: 間接的配列変数によるメソッド呼び出し

Zend Mail File Transport のドキュメントによると、コールバック オプションは配列変数を使用して設定することもできます。

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

このアプローチでは、任意の値を渡すことができます。現在のクラスのメソッドをコールバックとして取得します。

以上がZend メール単体テストの「「クロージャ」のシリアル化は許可されていません」という例外を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。