У меня есть код, как показано ниже в yii.Как остановить выполнение кода после возврата значения в рекурсивной функции?
<?php
class MediaController extends Controller {
public $mail_try = 1;
public function actionUpdate()
{
// ........... Other Code
$return_err = array();
/* Now Send Email */
if(sizeof($mail_queue)>0)
{
foreach($mail_queue as $resmail)
{
$this->mail_try = 1;
$to_arr = $resmail['to_arr'];
$cc_arr = $resmail['cc_arr'];
$from = $resmail['from'];
$subject = $resmail['subject'];
$message = $resmail['message'];
$log_msg = $resmail['log_msg'];
$attachment = $resmail['attachment'];
$log = $resmail['log'];
$output = $this->mailsend($to_arr, $cc_arr, $from, $subject, $message, 'Image/Media update (action : insert) ', $attachment,$log);
if($output==0)
{
$return_err[] = $resmail['vendor_name'];
}
}
}
}
public function mailsend($to, $cc, $from, $subject, $message, $crontask, $attachment = array(),$log='') {
//....... Other Code
//....... Other Code
try{
if (!$mail->Send()) {
if($this->mail_try < 3)
{
$this->mail_try++;
$this->mailsend($to, $cc, $from, $subject, $message, $crontask,$attachment,$log);
return 0;
}
} else {
return 1;
}
} catch (Exception $ex) {
return 0;
}
}
}
?>
Что я пытаюсь сделать, если почта отправка не удалась, а затем вызвать ту же функцию, чтобы повторить попытку отправить по электронной почте. Если отправка по электронной почте еще не выполнена, верните 0 else 1. Затем, используя это возвращаемое значение, я пытаюсь уведомить пользователя об ошибке отправки почты.
Раньше я думал, что код ниже возвращаемого значения не будет выполнен. Но я ошибаюсь. В приведенном выше случае он выполняется после возвращаемого значения, потому что он находится в рекурсивной функции.
Итак, как решить эту проблему?
Честно говоря, я не могу работать, что вы говорите, ваша проблема. Быстрый просмотр кода, хотя и делает меня тем, что строка '$ this-> mailsend (...)' должна быть 'return $ this-> mailsend (...)', удалив следующее 'return 0;'. Наконец, есть путь по внешнему виду, который будет возвращать null, когда почта будет терпеть неудачу дважды. –
Проблема в том, что код выполняется даже после возвращаемого значения, поэтому я не могу получить ожидаемое возвращаемое значение. что я пытаюсь сделать, это вернуть значение 1 или 0 после нескольких попыток отправки электронной почты. – DS9
Так что, если я отредактирую свой код как предлагаемый вами, он все равно выполняет код после возвращаемого значения. – DS9