예외: 'Closure' 직렬화는 허용되지 않습니다
테스트 메서드 내에서 클로저를 사용하려고 하면 "예외: 'Closure' 직렬화 Closure' is not allowed" 오류가 발생할 수 있습니다.
문제
아래 코드 조각은 클로저를 사용하여 이메일 저장을 위한 사용자 정의 파일 경로를 지정합니다.
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... $callback = function() { return 'ZendMail_' . microtime(true) .'.tmp'; }; // ... }</code>
해결 방법
해결책 1: 클로저를 일반 함수로 교체
클로저를 일반 함수로 교체:
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... function emailCallback() { return 'ZendMail_' . microtime(true) . '.tmp'; } $callback = "emailCallback"; // ... }</code>
해결책 2: 간접 메서드 호출에 배열 변수 사용
배열 변수를 사용하여 메서드를 간접적으로 호출:
<code class="php">protected function _initMailer() { ... elseif ('testing' === APPLICATION_ENV) { // ... $callback = array($this, "aMethodInYourClass"); // ... }</code>
이를 통해 다음을 수행할 수 있습니다. 클래스 내에서 메소드를 정의하고 배열을 사용하여 콜백에 전달합니다.
위 내용은 테스트 메서드에서 클로저를 사용하여 \'예외: \'클로저\' 직렬화는 허용되지 않습니다\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!