在PHP中,我總是看到例如從函數得到的數據是這樣的:我可以定義從函數到外部範圍的變量嗎?
function getSomeData(){
//this function will return a array of data
$data_A = 'foo';
$data_B = 'bar';
$data_C = 42;
return array('data_A'=>$data_A, 'data_B'=>$data_B, 'data_C'=>$data_C,)
}
//1. we call the function
$models = getSomeData();
//2. Now we need to define the variable by the return value.
$data_A = $models['data_A'];
$data_B = $models['data_B'];
$data_C = $models['data_C'];
//3. Then we can do whatever with those defined variable
doSomething($data_A);
doSomethingElse($data_B);
這看起來平常。現在,這個怎麼樣:
function getSomeData(){
$data_A = 'foo';
$data_B = 'bar';
$data_C = 42;
someMagicFunction($data_A); //this function will set variable at the upper level scope
someMagicFunction($data_B);
someMagicFunction($data_C);
return true;
}
//1. we call the function
getSomeData();
//2. Then we use it right here
doSomething($data_A);
doSomethingElse($data_B);
我想是嘗試跳過第2步,我將需要能夠「在上級範圍設置變量」的功能。 有時候我覺得第2步有點「不必要」 - 我認爲沒有那些代碼可以簡單而乾淨。
假設代碼是在一個類或匿名函數中,而不是在根級別中,是否有可能?如果沒有,爲什麼PHP不允許我這樣做?有沒有其他的方法來完成這項任務? (減少函數中的重複定義並再次定義外部)
這是一個壞主意,要做到這一點,因爲作用域是機制來保護你的變量。但是,您可以使用全局變量來執行此操作; http://php.net/manual/en/reserved.variables.globals.php – RichardBernards 2014-12-08 08:25:16
「假設代碼位於類或匿名函數中,而不是根級」 – LunaCat 2014-12-08 08:25:46
呃...使用類變量和'$ this' ?我可能不是很瞭解你的問題......請給出一個確切的例子,說明你想如何工作... – RichardBernards 2014-12-08 08:27:36