2011-12-30 46 views
5

Aşağıdaki yapılara sahip birçok php komut dosyaları var nasıl ayarlanır: doğrusu araba, kamyon veya olacağım tablo otomobiller daha haricindedinamik değişkenler php, tasarım deseni

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

... 

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

... 

başka senaryo aynı senaryo olacak Başka bir tabloyla, farklı değişkenlerle ve muhtemelen daha fazla veya daha az değişkenle çalışmak. Kullanmak için bir yol ya da iyi bir tasarım deseni var mıdır, öyle ki bu senaryoyu sadece 15 tane yazmak zorunda kalacağım ya da yazmak zorunda kalacağım.

cevap

2

Bu, mükemmel koddan daha az bir araya getirildiğinde güvenlik etkilerine sahiptir, ancak bunun sizin için bir sorun olmadığını varsayacağım.

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

extract kullanmanın avantajlarından bir isim çarpışmalar oluşacak davranışını belirtmek için olsun. Yine de EXTR_PREFIX_ALL bayrağını düşünebilirsiniz. Veya en iyi imo olan beyaz bir liste yapın.

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

dinamik böyle değişkenleri ayarlayabilirsiniz:

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

Bunu yapabilirsin,

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

Veya,

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

Daha sonra bir de register_globals etkinleştirerek sağlanabilir php.ini'da. Ancak bu, tehlikeli.

İlgili konular