動(dòng)態(tài)網(wǎng)頁(yè)P(yáng)HP中引用_PHP教程
推薦:七種緩存使用武器 為網(wǎng)站應(yīng)用和訪問(wèn)加速Web應(yīng)用中緩存的七種武器: 1 數(shù)據(jù)庫(kù)的緩存 通常數(shù)據(jù)庫(kù)都支持對(duì)查詢結(jié)果的緩存,并且有復(fù)雜的機(jī)制保證緩存的有效性。對(duì)于MySQL,Oracle這樣的數(shù)據(jù)庫(kù),通過(guò)合理配置緩存對(duì)系統(tǒng)性能帶來(lái)的提升
之前一個(gè)朋友的帖子提到過(guò)這方面的疑問(wèn),這里簡(jiǎn)單整理一下,希望能讓更多新學(xué)php的朋友得到幫助。
php的引用(就是在變量或者函數(shù)、對(duì)象等前面加上&符號(hào))是個(gè)高級(jí)話題,新手多注意,正確的理解php的引用很重要,對(duì)性能有較大影響,而且理解錯(cuò)誤可能導(dǎo)致程序錯(cuò)誤!
很多人誤解php中的引用跟C當(dāng)中的指針一樣,事實(shí)上并非如此,而且很大差別。C語(yǔ)言中的指針除了在數(shù)組傳遞過(guò)程中不用顯式申明外,其他都需要使用*進(jìn)行定義,而php中對(duì)于地址的指向(類(lèi)似指針)功能不是由用戶自己來(lái)實(shí)現(xiàn)的,是由Zend核心實(shí)現(xiàn)的,php中引用采用的是“寫(xiě)時(shí)拷貝”的原理,就是除非發(fā)生寫(xiě)操作,指向同一個(gè)地址的變量或者對(duì)象是不會(huì)被拷貝的,比如下面的代碼:
| 以下為引用的內(nèi)容: $a = array('a','c'...'n'); |
如果程序僅執(zhí)行到這里,$b和$b是相同的,但是并沒(méi)有像C那樣,$a和$b占用不同的內(nèi)存空間,而是指向了同一塊內(nèi)存,這就是php和c的差別,并不需要寫(xiě)成$b=&$a才表示$b指向$a的內(nèi)存,zend就已經(jīng)幫你實(shí)現(xiàn)了引用,并且zend會(huì)非常智能的幫你去判斷什么時(shí)候該這樣處理,什么時(shí)候不該這樣處理。
如果在后面繼續(xù)寫(xiě)如下代碼,增加一個(gè)函數(shù),通過(guò)引用的方式傳遞參數(shù),并打印輸出數(shù)組大小。
| 以下為引用的內(nèi)容: function printArray(&$arr) //引用傳遞 { print(count($arr)); } printArray($a); |
上面的代碼中,我們通過(guò)引用把$a數(shù)組傳入printArray()函數(shù),zend引擎會(huì)認(rèn)為printArray()可能會(huì)導(dǎo)致對(duì)$a的改變,此時(shí)就會(huì)自動(dòng)為$b生產(chǎn)一個(gè)$a的數(shù)據(jù)拷貝,重新申請(qǐng)一塊內(nèi)存進(jìn)行存儲(chǔ)。這就是前面提到的“寫(xiě)時(shí)拷貝”概念。
如果我們把上面的代碼改成下面這樣:
| 以下為引用的內(nèi)容: function printArray($arr) //值傳遞 { print(count($arr)); } printArray($a); |
上面的代碼直接傳遞$a值到printArray()中,此時(shí)并不存在引用傳遞,所以沒(méi)有出現(xiàn)寫(xiě)時(shí)拷貝。
大家可以測(cè)試一下上面兩行代碼的執(zhí)行效率,比如外面加入一個(gè)循環(huán)1000次,看看運(yùn)行的耗時(shí),結(jié)果會(huì)讓你知道不正確使用引用會(huì)導(dǎo)致性能下降30%以上。
分享:讓我們來(lái)編寫(xiě)一些PHP實(shí)用的腳本現(xiàn)在讓我們來(lái)編寫(xiě)一些更實(shí)用的腳本。我們將檢查瀏覽頁(yè)面的訪問(wèn)者用了什么類(lèi)型的瀏覽器。要達(dá)到這個(gè)目的,我們需要檢查用戶的 agent 字符串,它是瀏覽器發(fā)送的 HTTP 請(qǐng)求的一部分。該信息被存儲(chǔ)
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php 深入理解strtotime函數(shù)的使用詳解
- PHP中最容易忘記的一些知識(shí)點(diǎn)總結(jié)
- 解讀五個(gè)常見(jiàn)PHP數(shù)據(jù)庫(kù)問(wèn)題
- Apache服務(wù)器無(wú)法使用的解決方法
- PHP調(diào)用MsSQL Server 2012存儲(chǔ)過(guò)程獲取多結(jié)果集(包含output參數(shù))的詳解
- 最好用的PHP數(shù)據(jù)庫(kù)操作類(lèi)-ezSQL
- 十天學(xué)會(huì)php之第一天
- PHP打印一個(gè)三角形
- PHP時(shí)間戳與日期之間轉(zhuǎn)換的實(shí)例介紹
- AJAX在PHP中的簡(jiǎn)單使用
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-動(dòng)態(tài)網(wǎng)頁(yè)P(yáng)HP中引用
。