動態網頁PHP中引用_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:七種緩存使用武器 為網站應用和訪問加速
      Web應用中緩存的七種武器: 1 數據庫的緩存 通常數據庫都支持對查詢結果的緩存,并且有復雜的機制保證緩存的有效性。對于MySQL,Oracle這樣的數據庫,通過合理配置緩存對系統性能帶來的提升

      之前一個朋友的帖子提到過這方面的疑問,這里簡單整理一下,希望能讓更多新學php的朋友得到幫助。

      php的引用(就是在變量或者函數、對象等前面加上&符號)是個高級話題,新手多注意,正確的理解php的引用很重要,對性能有較大影響,而且理解錯誤可能導致程序錯誤!

      很多人誤解php中的引用跟C當中的指針一樣,事實上并非如此,而且很大差別。C語言中的指針除了在數組傳遞過程中不用顯式申明外,其他都需要使用*進行定義,而php中對于地址的指向(類似指針)功能不是由用戶自己來實現的,是由Zend核心實現的,php中引用采用的是“寫時拷貝”的原理,就是除非發生寫操作,指向同一個地址的變量或者對象是不會被拷貝的,比如下面的代碼:

      以下為引用的內容:

      $a = array('a','c'...'n');
      $b = $a;

      如果程序僅執行到這里,$b和$b是相同的,但是并沒有像C那樣,$a和$b占用不同的內存空間,而是指向了同一塊內存,這就是php和c的差別,并不需要寫成$b=&$a才表示$b指向$a的內存,zend就已經幫你實現了引用,并且zend會非常智能的幫你去判斷什么時候該這樣處理,什么時候不該這樣處理。

      如果在后面繼續寫如下代碼,增加一個函數,通過引用的方式傳遞參數,并打印輸出數組大小。

      以下為引用的內容:
      function printArray(&$arr) //引用傳遞
      {
      print(count($arr));
      }
      printArray($a);

      上面的代碼中,我們通過引用把$a數組傳入printArray()函數,zend引擎會認為printArray()可能會導致對$a的改變,此時就會自動為$b生產一個$a的數據拷貝,重新申請一塊內存進行存儲。這就是前面提到的“寫時拷貝”概念。

      如果我們把上面的代碼改成下面這樣:

      以下為引用的內容:
      function printArray($arr) //值傳遞
      {
      print(count($arr));
      }
      printArray($a);

      上面的代碼直接傳遞$a值到printArray()中,此時并不存在引用傳遞,所以沒有出現寫時拷貝。

      大家可以測試一下上面兩行代碼的執行效率,比如外面加入一個循環1000次,看看運行的耗時,結果會讓你知道不正確使用引用會導致性能下降30%以上。

      分享:讓我們來編寫一些PHP實用的腳本
      現在讓我們來編寫一些更實用的腳本。我們將檢查瀏覽頁面的訪問者用了什么類型的瀏覽器。要達到這個目的,我們需要檢查用戶的 agent 字符串,它是瀏覽器發送的 HTTP 請求的一部分。該信息被存儲

      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程