2011-12-30 39 views
5

Tôi có một vài kịch bản php mà có cấu trúc như sau:Làm thế nào để tự động thiết lập các biến php, thiết kế mẫu

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

... 

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

... 

kịch bản khác sẽ là kịch bản giống hệt nhau ngoại trừ chứ không phải là xe hơi, xe tải hoặc ô tô bảng tôi sẽ làm việc với một bảng khác, các biến khác nhau và có thể có nhiều biến hoặc ít hơn. Có cách nào hay một mẫu thiết kế tốt để sử dụng như vậy mà tôi chỉ phải viết một ví dụ của kịch bản này phó 15 hoặc vì vậy tôi có thể khác phải viết.

Trả lời

2

Điều này có ý nghĩa bảo mật khi kết hợp với mã nhỏ hơn hoàn hảo, nhưng tôi cho rằng đó không phải là vấn đề đối với bạn.

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

Lợi ích của việc sử dụng extract là bạn có thể chỉ định hành vi khi xảy ra va chạm tên. Bạn có thể xem xét cờ EXTR_PREFIX_ALL.

Hoặc, chỉ cần tạo danh sách trắng, tốt nhất là imo.

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

Bạn có thể tự động thiết lập các biến như thế:

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

Bạn có thể làm điều này,

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

Hoặc,

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

Sau đó người ta cũng có thể đạt được bằng cách cho phép register_globals trong php.ini. Nhưng đây là nguy hiểm.

Các vấn đề liên quan