關於foreach的一些思考

2021-08-14 23:04:53 字數 1303 閱讀 7223

以下**輸出的結果分別是?

$a = ['one', 'two', 'x'=>'y', 'a'=>'long'];

$val = 'si';

foreach ($a

as &$val)

var_dump($val);

--------------------

$a = ['one', 'two', 'x'=>'y', 'a'=>'long'];

$val = 'si';

foreach ($a

as &$val)

$val = 'sijiao';

$val = $val . 'mao';

var_dump($val);

答案測一下就可以得到了~

原因是: foreach在迴圈結束後仍然會保留最後乙個val值,為防止出現意想不到的情況、可以unset掉

另外:可以思考乙個問題~

function

one($arr)

}function

two($arr)

}$a = array( 'a', 'b', 'c' );

one($a);

two($a);

誰的效率會更高、重要的是為什麼?

one函式:

1. 將乙個陣列作為引數、本身是非引用傳遞、所以陣列知道不用考慮原陣列的修改

2. 在foreach時、非引用傳遞、無需修改外部陣列,它會複製陣列的內部迭代偏移狀態(很小的數字)不會有效能或記憶體占用問題

3. 它使用迭代偏移來遍歷陣列的所有鍵值對,當前偏移量的值分配給乙個$val的變數

4.$val 是否複製該值? 不會、、是重新利用記憶體中現有值,除非發生修改、否則不會建立任何副本、修改時會在記憶體中分配乙個新的zval、賦值給$val

two函式

1. 函式引數本身不允許修改外部引數

2.foreach時傳入引用&、php為保證外部引數的值、只能重新複製乙份,所以在開始迭代前就完整的複製了乙份原陣列

思考三:

$arr = range(0,100000);

for($i = 0; $i

< 1000; $i++)

}var_dump($val);

------------

$arr = range(0,100000);

for($i = 0; $i

< 1000; $i++)

}var_dump($val);

得到的val值分別是多少?

參考:100001 和 100100

關於SpringIOC的一些思考

ioc是 依賴倒置原則 的乙個特例,說其是特例,就是說其具有 依賴倒置原則 的性質。依賴倒置原則強調的兩點是 上層模組和下次模組都依賴於抽象,二者之間通過這種抽象的東西聯絡在一起 具體可以依賴於抽象,而抽象不能依賴於具體。我認為spring提倡的 基於介面程式設計 就是為了遵循 依賴倒置原則 其中所...

關於sizeof 的一些思考

今天面試被問到sizeof,回來整理一下。1 定義 sizeof是c c 中的乙個操作符 operator 作用就是返回乙個物件或者型別所佔的記憶體位元組數。msdn上的解釋為 the sizeof keyword gives the amount of storage,in bytes,assoc...

關於創意的一些思考

2016.12.2 22.20 bgm 古風 這週三的下午 27號 難得去聽了乙個講座 關於以創意為核心的動漫產業鏈價值的最大化 其實還是 由於這個話題吸引了我,演講的是上海美影的老廠長,由於時間的關係,給我們講述了在過去幾年美影廠針對傳統 動畫人物的產業鏈的發展以及注重要中國特色動漫。其實,在這幾...