define定义常量后怎么覆盖或者让先前定义的失效

前提:发送邮件,根据客户语种加载不同语言包模板,发送不同语种的邮件
目前在循环中发送邮件后,require语言包的时候常量都是取的第一次define的常量值,如果第一次加载是英语语言包,后面即便是俄语客户,加载了俄语语言包后,邮件里面的内容依然是英语;
现在有没有什么好的解决方案?
类似代码如下:

function sendEmail($languageId)
{
    switch ($languageId) {
        case 1 :
            require('email_en.php');
            break;
        case 2 :
            require('email_ru.php');
            break;
        default :
            require('email_en.php');
            break;
    }
}

$emailData = [
    ['id' => 1, 'language_id' => 1],
    ['id' => 2, 'language_id' => 2],
    ['id' => 3, 'language_id' => 3],
    ['id' => 4, 'language_id' => 4],
];
foreach ($emailData as $v) {
    sendEmail($v['language_id']);
}
阅读 5k
3 个回答

define定义的是常量,不能重定义吧。 只能换一种方式了,用 $GLOBALS什么的。还可以email_en.php返回数据

switch ($languageId) {
    case 1 :
        $emailData = require('email_en.php');
        break;
    case 2 :
        $emailData = require('email_ru.php');
        break;
    default :
        $emailData = require('email_en.php');
        break;
}

// do something with $emailData ...

常量是不能改变的。

//email_en.php
return [
    '_NAME_'=>'name',
    //.....
];

//sendEmail.php
$language = require('email_en.php');

另外,语言包不大的话,可以一次性全部载入。

$languages = [
    1=>require('email_en.php'),
    2=>require('email_ru.php'),
    //...
];

$language = $languages[$language_id];
新手上路,请多包涵

通过CURL调用邮件逻辑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题