为了账号安全,请及时绑定邮箱和手机立即绑定

新手上路,define定义常量后怎么覆盖或者让先前定义的失效求大佬指点!

新手上路,define定义常量后怎么覆盖或者让先前定义的失效求大佬指点!

呼啦一阵风 2019-10-25 23:43:00
前提:发送邮件,根据客户语种加载不同语言包模板,发送不同语种的邮件目前在循环中发送邮件后,require语言包的时候常量都是取的第一次define的常量值,如果第一次加载是英语语言包,后面即便是俄语客户,加载了俄语语言包后,邮件里面的内容依然是英语;现在有没有什么好的解决方案?类似代码如下:functionsendEmail($languageId){switch($languageId){case1:require('email_en.php');break;case2: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($emailDataas$v){sendEmail($v['language_id']);}
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

define定义的是常量,不能重定义吧。只能换一种方式了,用$GLOBALS什么的。还可以email_en.php返回数据
switch($languageId){
case1:
$emailData=require('email_en.php');
break;
case2:
$emailData=require('email_ru.php');
break;
default:
$emailData=require('email_en.php');
break;
}
//dosomethingwith$emailData...
                            
查看完整回答
反对 回复 2019-10-25
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

常量是不能改变的。
//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];
                            
查看完整回答
反对 回复 2019-10-25
  • 2 回答
  • 0 关注
  • 421 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信