2011-12-30 81 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。但這是危險