2011-12-30 41 views
5

我有具有以下结构的几个PHP脚本:如何动态地设置变量PHP,设计模式

$count = $_GET['count']; 
$sort = $_GET['sort']; 
$car = $_GET['car']; 
$driver = $_GET['driver']; 

... 

$SQL = "SELECT car, truck FROM autos WHERE car='$car' AND truck='truck'"; 

... 

另一个脚本将是相同的脚本,除了而非汽车,卡车或桌子汽车我会使用另一个表格,不同的变量以及可能更多或更少的变量。有没有一种方法或一个好的设计模式来使用,我只需要编写一个脚本的一个副本,大约15个左右,否则我可能不得不写。

回答

2

与不完美的代码结合使用时,会产生安全隐患,但我认为这对您不是问题。

extract($_GET, EXTR_SKIP); 
echo $car; 

使用extract的好处是您可以指定发生名称冲突时的行为。你可能会考虑EXTR_PREFIX_ALL标志。

或者,只是做一个白名单,这是最好的imo。

$allowed = array('car', 'count'); 
$vars = array_intersect_key($_GET, array_flip($allowed)); 
extract($vars); 
1

可以动态设置变量这样的:

$string = 'varName'; 
$$string = 'Hello World'; // $$string is $varName 
echo $varName; // returns 'Hello World' 
1

你可以做到这一点,

foreach(array('count','car','driver', 'sort') as $v){ 
    $$v = $_GET[$v] 
} 

或者,

foreach($_GET as $k => $v){ 
    $$k = $v 
} 

后来一个也可以通过启用register_globals的实现 in php.ini。但这是危险