2009-12-27 26 views
1

我知道很多人會稱這種微型優化,是的,但它也是很好的知道這樣的事情。現在我的問題,在我的第一個例子下面你會看到我有一個變量集,其中包含一個MySQL查詢,然後我有另一行運行一個函數與上述變量mysql查詢。在我的第二個例子中,我全部在1行中完成,我假設沒有真正的速度增益,但可能會降低內存使用率?如果可能的話,在PHP中消除額外的變量會更好嗎?

//example 1 
$sql= 'UPDATE users SET setting_online=0 WHERE user_id=' .$_SESSION['user_id']; 
Database::executeQuery($sql); 

//example 2 
Database::executeQuery('UPDATE users SET setting_online=0 WHERE user_id=' .$_SESSION['user_id']); 

回答

3

可能是的,但那40或50字節是不會有問題的,永遠。

但是減少變量的數量有一個完全不同的原因:它減少了程序員爲了遵循程序必須跟蹤的狀態量 - 這使得你的工作更容易,因此代碼更易於維護。

+2

因此,儘管使用好的變量名稱。 – tvanfosson 2009-12-27 14:03:09

+0

如果他的代碼流中存在很多活動變量,以至於無法跟蹤它們,他可能會遇到架構問題。當使用對象來封裝狀態和問題時,不應該放棄臨時變量賦值。此外,當他們不再需要時,他仍然可以手動解除他們。 – Gordon 2009-12-27 14:28:34

0

看看memory_get_usage(),然後對它進行基準測試並告訴我們。

我個人認爲它沒有任何顯着影響。在你的例子中查詢是相當長的,並且在執行它之前將它分配給一個變量,這使得代碼更容易閱讀。

2

我會使可讀性/可理解性爲目標。如果使用額外的變量增加可讀性,然後使用它們。如果刪除它們可提高可讀性,請將其刪除。

此外,即使沒有SQL注入的機會,也可以在任何地方使用參數化查詢。這只是一個很好的習慣。

0

是例子2將有助於降低內存佔用

0

不管是什麼結果字符串存儲在內存中。可以是傳遞給函數的東西,也可以是傳遞給函數的變量。

它很大程度上取決於php是否將字符串兩次存儲到一個名爲sql的變量中,第二次按值存儲時爲。由於PHP(更具體地說是Zend引擎)使用「寫入時複製」,您將不會將該字符串存儲兩次。它只會在字符串被修改時被複制。

您將在第一個示例中使用的唯一額外內存就是對該副本的額外引用。這是內存中最小的增加,所以是的,第一個例子會使用一些額外的32位字。這是微不足道的,如果它很重要,你可能不應該在PHP中開發。就內存使用而言,如此之多的內容已經超出了你的控制範圍,並且如果幾個32位字很重要,那麼你應該用C寫你的代碼:)。