PHPで例外をキャッチしたときに返す変数/オブジェクトを作成する必要がありますか?

受付中 プログラミング
2024-12-24
hoge
私はしばらくの間この方法で例外を処理していますが、最近私を悩ませています。
            protected function sendPostmarkBatch($envios_preparados)
            {
                try {
                    $client = new PostmarkClient($this->postmarkToken());
        
                    $sendResult = $client->sendEmailBatchWithTemplate($envios_preparados);
        
                } catch (PostmarkException $e) {
                    log_message('error', 'HTTP: ' . $e->httpStatusCode . ' MESSAGE: ' . $e->message . ' ERROR CODE: ' . $e->postmarkApiErrorCode);
        
                    $sendResult = new stdClass();
                    $sendResult->ErrorCode = $e->postmarkApiErrorCode;
                } catch (Exception $generalException) {
                    log_message('error', 'GENERAL EXCEPTION: ' . $generalException);
        
                    $sendResult = new stdClass();
                    $sendResult->ErrorCode = '1';           
                }
        
                return $sendResult;     
            }
        
オブジェクトまたは変数$sendResultを「catch」で作成して返す必要が本当にありますか、それとも「try」が失敗してもすでに作成されていますか?それを行うためのより良い方法はありますか? ありがとう!
回答一覧
Is it really necessary to create the object or variable $sendResult at 'catch' to return it or it's already created even if 'try' fails?...簡単なテストでそれがわかります。しかし、試してみる前に作成しない限り、作成する必要があります
hoge
ありがとう。私はそれを試したことはほぼ確実であり、それが私がそのようにやっている理由です。それは、あなたが長い間物事を行ってきた方法を疑うようになったときのそれらのケースの1つに過ぎず、おそらくもっと良い方法があるでしょう。
hoge
それは必要です。
それがあなたの論理に合っているかどうかはわかりませんが、次のようなことができます。
        protected function sendPostmarkBatch($envios_preparados)
        {
            $sendResult = new stdClass();
            
            try {
                $client = new PostmarkClient($this->postmarkToken());
        
$sendResult = $client->sendEmailBatchWithTemplate($envios_preparados);
} catch (PostmarkException $e) { log_message('error', 'HTTP: ' . $e->httpStatusCode . ' MESSAGE: ' . $e->message . ' ERROR CODE: ' . $e->postmarkApiErrorCode);
$sendResult->ErrorCode = $e->postmarkApiErrorCode; } catch (Exception $generalException) { log_message('error', 'GENERAL EXCEPTION: ' . $generalException);
$sendResult->ErrorCode = '1'; }
return $sendResult; }

$client->sendEmailBatchWithTemplate($envios_preparados)失敗した場合、変数$sendResultは上書きされません。
hoge