该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在PHP程序中,有时会用到拼变量,也会遇到拼常量的情况。
拼变量,N年之前就解决了;但拼常量,刚刚才在一位前同事的帮助下,解决了,且提供了两种方案。
十分感谢这位人称“老毕”的大牛同事。我和他在2010年共事过。
现分享给大家。
由于本文是技术贴,就不多做说明了。理解的自然看两眼就明白其功能,不理解的说两天也没用。
上代码。
拼常量,很简单:
---------------------------------------------------------
$n_a = 1;
$n_b = 2;
$n_c = 3;
$n_d = 4;
$n_e = 5;
$act = trim(@$_GET['act']);
$act = in_array($act,array('a','b','c','d','e')) ? $act : 'a';
echo ${'n_'.$act};
---------------------------------------------------------
还是上述问题,如果使用常量时,通常会想到的程序是这样的:
---------------------------------------------------------
define('N_A',1);
define('N_B',2);
define('N_C',3);
define('N_D',4);
define('N_E',5);
$act = trim(@$_POST['act']);
$act = in_array($act,array('a','b','c','d','e')) ? $act : 'a';
if($act == 'a'){
$n = N_A;
}elseif($act == 'b'){
$n = N_B;
}elseif($act == 'c'){
$n = N_C;
}elseif($act == 'd'){
$n = N_D;
}else{
$n = N_E;
}
echo $n;
---------------------------------------------------------
但有一线之路,上面的写法就是不允许的。因为这个笨方法太‘复杂’了。
大牛同事提供的方案之一:
---------------------------------------------------------
define('N_A',1);
define('N_B',2);
define('N_C',3);
define('N_D',4);
define('N_E',5);
$act = trim(@$_GET['act']);
$act = in_array($act,array('a','b','c','d','e')) ? $act : 'a';
$arr = get_defined_constants(true);
$arr = $arr['user'];
echo $arr['N_'.strtoupper($act)];
---------------------------------------------------------
方案之二:
---------------------------------------------------------
define('N_A',1);
define('N_B',2);
define('N_C',3);
define('N_D',4);
define('N_E',5);
$act = trim(@$_GET['act']);
$act = in_array($act,array('a','b','c','d','e')) ? $act : 'a';
echo constant('N_'.strtoupper($act));
---------------------------------------------------------
推荐使用最后一种方案。