2016-11-08 48 views
0

在我公司的網站上,有一些我不明白的代碼。它工作正常。見:可以自動切換參數值嗎?

extract($_REQUEST); 

switch(@$task){ 

     //Only for tracker app/ Later move to seperate api/// 
    case "get_all_trackers": 
     $trackerObj = new trackerClass('trackerClass'); 
     echo $service = $trackerObj->getAllTrackers($_POST); 
     break; 
    default: 
     //dsfsdfdsf 
} 

現在,你可以看到$任務沒有定義(「根據我」)。但它在某種程度上需要字符串'get_all_trackers'。當我使用PostMan並給出參數task=get_all_trackers並且它工作時,我開始瞭解這一點。我甚至將$任務的名稱更改爲$ somethingelse,並且它仍然有效。它的價值如何?

+0

['extract()'](http://php.net/extract)發揮了魔力,將REQUEST鍵設置爲變量。因此,爲什麼如果你在Postman中改變'task'的名字並且它仍然可以工作。 '$ task'本質上是'$ _REQUEST ['task']'。 – Darren

+0

好的,但如何更改varialbe的名稱不會影響它?已更改的變量名稱與帖子鍵不同? –

+0

你在改變什麼? – Darren

回答

0

。做這個的是extract()函數。根據您的代碼,它根據$_REQUEST數組鍵和值對爲名稱和值分配變量。

例子:

比方說,當前的URL是http://yourwebsite.com/yourpage.php?foo=bar。 然後$_REQUEST['foo']將具有值"bar"。如果您使用extract($_REQUEST),則將有一個變量$foo,其值爲"bar"

+0

當我做了'var_dump($ _ REQUEST)''我看到一個數組具有'task = get_all_records'值。所以在這裏我們有'任務'鍵,但是爲什麼即使當我改變開關的參數變量時,它也不影響結果? –

+0

@VikasKumar你是什麼意思你改變了開關的參數變量? –

+0

如果您知道我們可以在PostMan中使用參數。我首先更改了'switch($ changedName)'變量名,並在PostMan中使用了同名的changedName作爲鍵,並且仍然找到了相同的響應。爲什麼這樣? 'extract()'返回與數組中的鍵相同的變量名? –