導航:首頁 > 編程語言 > 深入理解php原理鳥哥

深入理解php原理鳥哥

發布時間:2023-02-15 08:10:39

A. 鳥哥的linux私房菜和搞php的那個鳥哥是同一人嗎

根本不是同一人,原因如下:

linux私房菜是蔡德明,PHP是惠新宸。

B. 惠新宸的個人簡介

惠新宸於2011年8月作為核心開發人員加入PHP語言官方開發組,目前是該組織的唯一一位國人,也是國內最具影響力的PHP技術專家。PHP語言官方開發組負責目前世界最為流行的Web開發語言PHP的設計及維護,由全球最頂尖的PHP開發者組成,他們中絕大部分來自於各個全球頂級的IT企業。據統計顯示,目前全世界范圍內有超過80%的網站使用PHP作為主要開發語言。PHP語言尤其在雅虎, Facebook以及網路、騰訊、淘寶、新浪等著名互聯網公司得到了非常廣泛的深度應用。
惠新宸作為Zend公司外聘顧問,負責PHP Zend引擎以及Zend Optimizer+的開發和維護。作為核心開發者,開發了性能提升版本的PHP New Generation(PHP7),作為Zend引擎面世以來最大的一次重構,PHP 7相比PHP5.6在實際產品中得到了最高超過100%的性能提升 。並且為將來的進一步性能優化做好了基礎准備。
從PHP5.6版本開始, 惠新宸(Xinchen Hui)的名字已經列在了PHP Credits 的Zend引擎作者之列。
惠新宸作為知名PHP技術博客「風雪之隅」的博主, 一直專注與PHP底層原理的研究和分享。 其中《深入理解PHP原理》系列文章被廣泛推薦, 成為國內PHP語言深度使用和定製的經典入門教材。他基於PHP擴展開發的PHP框架Yaf, 被譽為最快的PHP開發框架。在PHP 5.4開發過程中,他一共為PHP貢獻了近400個交付。在PHP5.5的開發過程中,他為PHP新增了Try Catch Finally, Const Array/String dereference, foreach list等新特性。在PHP7的開發中, 他作為核心開發者(共3人 )完成了PHP7的核心性能提升分支PHP NG的從無到有的開發。
在加入新浪微博之前,惠新宸曾供職於網路、雅虎中國等著名公司,擔任網路PHP高級顧問等重要職務,長期致力於PHP技術提升及沉澱, 參與規劃及推動網路LAMP架構統一等戰略方向,並曾多次代表網路參加PHP相關技術高峰論壇及技術沙龍等。
在加入新浪微博之後,惠新宸主要負責微博的LN(A)MP架構的優化,以及微博應用的性能提升。在一年的時間內,讓PC微博的首屏時間從最初的3秒降到了1秒左右。同時在微博大力推進架構升級,技術沉澱等工作,明顯的提升了微博的整體技術水平 。

C. PHP為什麼會被認為是草根語言

從PHP誕生之日起,PHP就開始在Web應用方面為廣大的程序員服務。同時,作為針對Web開發量身定製的腳本語言,PHP一直秉承簡單、開源的思想,這也使得PHP得以快速的發展,並且大力地推動Web2.0的出現與發展。但是,長期以來,PHPer(PHP Programmers)被認為是處於草根階層的程序員,被認為是技術含量少,層次低的程序員。這點在國內尤其突出。
記得一個技術主管說過這樣一個事情。他給一個程序員分配了PHP的開發任務,沒想到那個程序員居然說:「我是學java出身的,你讓我去寫 PHP,你這不是在貶低我嗎?」。這件事情給我印象很深、觸動也很大。雖然這不能代表大部分程序員的看法,但是這么認為的人應該不少。還有人說,現在如果是大型的政府項目,PHP是肯定不會被列入考慮的范圍之內的。
那麼為什麼PHPer會被認為是草根階層,是因為它很簡單,人人都可以學會,所以沒什麼難度嗎?我以前也是這么認為。PHP入門很快,處理文件,數據,遠程連接,網路編程都非常方便,官方也有這樣的說法:PHP學習的成本很低,所以你容易去使用它。這個想法也是普遍的,甚至大部分的PHPer 自己都這樣認為。
說到這里,我想大家就會想到我為什麼要寫這些文字。因為一年多的PHP推廣工作讓我了解到許許多多的使用PHP的公司的大概情況。在這些過程中我慢慢體會到其中的根本原因。這里我說是根本原因雖然是個人的看法,但是我覺得事實就是如此。
那麼為什麼PHPer會被看成草根階層,根本原因是PHPer所作的事情(通過代碼實現)的絕大部分都是表現層的東西,這個熟悉PHP的人都知道。當然也會有PHP會說他用MVC結構編寫的某某框架具備的如何如何的功能。但是這些還是表現層。所以只會處理表現層的程序員就被看成草根階層了。事實上也是如此,因為這種情況下PHP確實很難構造大型的應用。
這就找到原因了,不是的。為什麼PHPer總是在負責表現層的東西呢。答案是底層的數據處理(Web應用就是數據存儲和查找)我們一般不去觸及。好,那麼說到這里有些人可能已經想到了,那不就是資料庫嗎?對,就是資料庫。讓PHPer一直當草根的元兇就是資料庫。為什麼?
PHPer對MySQL的依賴過大
因為目前流行的web架構中,前端是負載均衡系統,中間是web伺服器,後面是資料庫伺服器。所以,大部分PHPer工作在Web伺服器層面。因為資料庫已經很好地為我們組織數據了。所以PHP中沒有太多的演算法,而且大家潛意識下也覺得不需要,更何況會影響性能。
這種情況下,PHPer就成為了資料庫使用者,他總是在操作資料庫。而不是在做程序。一個最簡單的PHP腳本就是,連接資料庫,把數據取出來,然後用命令輸出到瀏覽器。整個過程不超過10行代碼。給人的感覺就是太簡單了。沒有任何技術含量。為什麼了,因為數據處理部分都已經被資料庫做完了。尤其是MySQL的使用。MySQL是免費的,所以大多數程序員可以自由地使用它,另外MySQL的速度夠快了,所以做個PHP應用程序非常的簡單。這就相當於給你槍以後你覺得沒有必要學習武功一樣。當然,我不是說槍沒有武功好。而是說,槍的出現,小孩都可以輕松便捷地殺人了。
我們再詳細說說為什麼是資料庫。這里我說一個例子。我去過北京一家非常著名的網站,當時我們還有一個比較資深的PHP程序員在那說些系統架構的事情。我記得當時那個程序員問大家一個數據結構中的演算法問題的時候,全場沒有一個人能答得出來(包括我)。然後那個程序員就開始給大家講些很基礎的數據結構的東西了。讓我一下子回想到大學時候學的數據結構課。而這些基礎的數據排序、查找、傳遞的問題在其他高級語言(比如C)是非常普遍的。但是在PHP沒有。PHPchina.com的論壇也有個板塊叫PHP的數據結構和演算法。這個板塊的帖子也是寥寥無幾。
說到這里,大家明白了吧?大部分PHPer僅僅處理表現層的東西,而在MySQL的便捷使用下,PHPer幾乎不用觸及任何數據結構與演算法的情況下完成大部分開發任務,所以一個才有上面的,沒有一個PHP程序員能夠回答出那道數據結構的問題,換成是C等語言,情況可能就大不相同了。是PHPer草根,才讓PHP顯得草根。
仔細回想下,目前網路上大家討論的最多的是兩個方面的問題。一個是PHP的類的使用(處理過程的封裝),還有一個是開發框架問題。但是我們仔細分析的話,發現這些所謂的PHP中比較復雜的概念裡面沒有數據處理。為什麼,有資料庫。用一個Adodb或者PHP5的PDO就可以搞定了。真的搞定了嗎?不是,這些無非是在連接資料庫,沒有數據處理。所以PHPer似乎就沒有什麼可以拿出檯面上的東西。
再說一個具體的代碼問題,無級分類。這個概念我想大家都不會陌生了吧。我見過兩種處理方式。第一個是地道的PHPer的處理方式,也是目前比較流行的。就是用資料庫來處理。而且欄位很少,只需要加個父類的欄位並加以判斷就行了。而且這個方法很實用。效率也高。但是這個不是數據處理的范疇了,而是資料庫的查找。
第二個是C程序員用PHP寫出來的,他把所有的分類信息都從資料庫取出來,然後用數據結構演算法進行排列分布,然後輸出。
這里我們不對這兩種方式的效率進行對比,我想大家都有各自的想法。但是我想說明一個問題,就是這兩種做法的本質的區別。PHPer習慣性地用資料庫來處理,而且有很巧的處理方式,效率也很高。這種方式就是資料庫查詢。而第二種方法是比較有特點的。他認為資料庫就是存放數據的地方,具體的邏輯處理還要靠自己的邏輯。
因此,結論是第二種方法的使用者覺得自己強些,因為數據的邏輯是他組織的。並且覺得PHPer的那種做法無非就是會查詢資料庫罷了。所以他認為PHPer是草根級的,只懂得操作資料庫和排列頁面(smarty搞搞那種)。
讓資料庫回歸本職工作
說到這里,我想大家都已經回憶了不少自己平時用PHP做開發的經歷了吧,是否發現大家確實都在操作資料庫呢。
那麼我們來討論下這個問題。資料庫不好嗎?為什麼我一直用資料庫處理數據都沒有問題。我要說的是資料庫是有問題的,而且有很大的問題。當然這里我並不是說不能用資料庫,也不是在貶低資料庫的性能。而是,我們沒有充分認識到資料庫所起到的作用。
我的想法源起於這樣一個事情,有一次一個網站的技術總監問我,為什麼他們的網站那麼慢,要怎麼辦。當時,我的MSN里Zend總部的工程師正好在線,我就問他PHP響應比較慢了,怎麼辦?他當時直接告訴我,是資料庫問題。肯定是資料庫沒有優化設計好。所以,我沒有給那個技術總監確切的答案了,因為他們的資料庫設計我們是不能涉及的。所以就給了大概的資料庫優化的建議。這樣的事情屢次發生,我就開始懷疑,為什麼Zend總部的工程師每次都跟我說是資料庫的問題呢,難道我們不能從PHP層面來解決這個問題嗎?答案是不能。因為PHP目前的運行速度已經是很快了,通過Zend的性能分析也能看到一個用戶的點擊,PHP的運行時間只有10%不到,那PHP在干嗎?它在等。等資料庫的查詢結果。這個方面在目前的PHP產品中有了很大的提高,那就是 Caching和網頁靜態化兩個方案。
Caching可能大家會比較陌生,但是網頁靜態化現在連PHP產品的用戶都非常清楚了。速度快、容易被搜索到等等,好處不言而喻。開玩笑地說,現在網站的主頁實現網頁靜態化只需要硬碟足夠大。J至於Caching就比較復雜些,也是大多數PHPer感到頭疼的地方。甚至於有些人會用C來實現。因為Caching中的數據有效期驗證、查找、提取、更新等等都是比較難處理。當然,也有人會用資料庫來處理 Caching問題。
所以,當訪問量激增的時候,PHP架構的網站會出現的很多問題都因資料庫而起。資料庫的同步問題還不算什麼。關鍵是資料庫的響應速度會有指數級的降低。這個問題我在10月23號LAMP發布會的時候問過MySQL的副總裁。他當時也沒有給我比較完美的答案(這也我的意料之中),因為資料庫總會有瓶頸的,除非是神仙資料庫,哈哈!
這里有個題外話,LAMP大會的時候我跟Yahoo的一個技術高管聊的時候,我問他Yahoo在選擇MySQL還是Oracle的時候是怎麼考慮,他的答案令我非常驚訝。他說大部分的時候我們是會用MySQL的,因為它的性能已經達到我們的要求。但是什麼時候我們會選用Oracle呢,就是當我們需要存儲收費用戶的數據的時候。我就問為什麼,難道Oracle比MySQL穩定嗎?他說,這個倒沒有特別考慮。關鍵是如果使用Oracle的話,當出現問題的時候我們可以找到負責人,Oracle會負責事故的處理,但是如果用MySQL的話,我們找誰去?
所以,我們對資料庫的看法應該糾正過來,就是說資料庫不是萬能的。如果有實力的話自己開發資料庫。聽說Google就是那樣的。
那麼我們怎麼看待資料庫呢?我個人的理解是資料庫只是用來降低開發成本的手段。因為採用資料庫以後我們不需要考慮數據的存儲,尤其是排序和查找。但是這會帶來什麼問題呢?就是當業務膨脹的時候,資料庫就成為瓶頸了。這個時候問題就會非常棘手。因為這個是底層的數據處理。牽一發而動全身。
所以我認為正確的觀點是,資料庫是一個數據備份機。怎麼理解,我們只需要保證數據的存儲有效性就行了。而這本來就是資料庫的核心功能,只不過因為資料庫的方便的排序等功能讓大家把過多的處理都交給資料庫來操作了。一個用戶的點擊PHP就把一大堆的任務交給資料庫,然後把結果排列下給用戶就完事了。這對資料庫是不公平的。也是因此大家開始抱怨資料庫的性能了。
針對這個觀點,我們再舉個例子,有一次我去拜訪一個大型的網路公司(基本上國內只要上過互聯網的都知道),他們使用PHP很少,但是我了解到他們其它業務是怎麼使用資料庫。他們自豪地跟我介紹說他們在資料庫的外圍有個第二資料庫(我這里起名叫第二資料庫)。為什麼叫第二資料庫呢,原來它是一個緩存系統。那麼開發工程師怎麼去這個緩存系統獲取數據呢?那個技術總監自豪地說,他們這個緩存系統有SQL查詢語句。我當時很驚訝,但是後來想想確實需要這個。因為當你的緩存系統達到一定量級的時候從緩存獲取數據都非常復雜,乾脆寫個SQL查詢語句讓緩存系統分析、處理並返回數據。而且他們告訴我,在他們那裡,就算是用PHP的話也是讓PHP去那個緩存系統讀取數據。
所以說,如果你能處理好這樣的問題的話,把數據存放在資料庫,然後資料庫只起到備份的作用。然後你用自己的中間層來處理分析數據,效果是90% 以上的用戶不訪問資料庫。有人就會說了,這不就類似連接池的東西嗎?是的,因為資料庫的瓶頸是無法解決的,我們只能在Web伺服器和資料庫中間加個中間層來做緩沖。
可能大家會說了,切,這個我們早就知道了。那好,這里我要說的是它引發的兩點思考:
第一,有些語言已經有連接池技術的基礎上,那些程序員可以方便地使用連接池而構建大型應用。那麼如果他們認為 PHPer只會是用資料庫,那麼我們是不是可以說他們只會是用連接池呢?連接池和資料庫在這個概念上有何區別?
第二,當PHPer開始構建自己的緩存系統的時候,他是不是突破了PHPer只會是用資料庫的層次?因為他參與了數據邏輯的處理工作。那麼他還是草根嗎?
最後,懂得獨立思考的PHPer不是草根,什麼事情都丟給資料庫去做的才是。

D. php鳥哥的學歷有多高

網名:雪候鳥,大家尊稱鳥哥,惠新宸 , 是國內最有影響力的 PHP 技術專家,PHP 開發組核心成員,PECL 開發者,Zend 公司外聘顧問。他曾供職於雅虎,網路,現在新浪微博任平台及數據部總架構師兼首席 PHP 顧問。惠新宸是 PHP NG 核心開發者,PHP5.4,5.5 的主要開發者。作為 PECL 開發者貢獻了 Yaf ,Yar 以及 Yac、Taint 等多個優秀開源作品,同時也是 APC,Opcache,Msgpack 等項目的維護者。

E. 深入PHP中的HashTable結構詳解

深入PHP中的HashTable結構詳解

深入PHP中的HashTable結構詳解

對php內核有一定了解的人應該都知道php的精髓就是HashTable,HashTable在php的實現中無處不在。包括php的數組、什麼全局變數、局部變數的作用域等等,php的hashtable拆開來說就是四部分:

hash函數:用的是time33的散列函數,將一個字元串的key轉換成一個數字

一個C數組:用來儲存桶(buckets)的

兩個雙向的鏈表:第一個雙向鏈表是數組的每個元素(桶bucket)是一個雙向鏈表,這樣做是為了解決hash沖突;第二個雙向鏈表是數組將每一個桶(bucket)連接起來,這里要連接的也就是第一個雙向鏈表的鏈表頭,這樣做是為了遍歷整個hash表用的,鳥哥有篇blog是講php的foreach的,這里這樣設計就是給foreach用的==>《深入理解PHP之數組(遍歷順序)》

我這里不再說hashtable的struct和bucket的`struct了,因為下面的推薦鏈接幾乎都講了,我不覺得我能描述和說的比他們好,每個人的水平不一樣,我就以我現在的技術水平來描述,所以我就只把我整理的一些東西記錄一下

下面是php中hash實現的兩個文件:zend_hash.c zend_hash.h。這兩個文件裡面實現了一堆的api,也引申出了一堆的api,下面是實現出來的api的原型

復制代碼 代碼如下:

ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength)

ZEND_API ulong zend_get_hash_value(const char *arKey, uint nKeyLength)

ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)

ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)

ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int _zend_hash_index_update_or_next_(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int zend_hash_rehash(HashTable *ht)

static int zend_hash_do_resize(HashTable *ht)

ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, int flag)

ZEND_API void zend_hash_destroy(HashTable *ht)

ZEND_API void zend_hash_clean(HashTable *ht)

static Bucket *zend_hash_apply_r(HashTable *ht, Bucket *p)

ZEND_API void zend_hash_graceful_destroy(HashTable *ht)

ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht)

ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)

ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)

ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func, int num_args, …)

ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)

ZEND_API void zend_hash_(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, void *tmp, uint size)

ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite ZEND_FILE_LINE_DC)

static zend_bool zend_hash_replace_checker_wrapper(HashTable *target, void *source_data, Bucket *p, void *pParam, merge_checker_func_t merge_checker_func)

ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam)

ZEND_API int zend_hash_find(const HashTable *ht, const char *arKey, uint nKeyLength, void **pData)

ZEND_API int zend_hash_quick_find(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void **pData)

ZEND_API int zend_hash_exists(const HashTable *ht, const char *arKey, uint nKeyLength)

ZEND_API int zend_hash_quick_exists(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h)

ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)

ZEND_API int zend_hash_index_exists(const HashTable *ht, ulong h)

ZEND_API int zend_hash_num_elements(const HashTable *ht)

ZEND_API int zend_hash_get_pointer(const HashTable *ht, HashPointer *ptr)

ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr)

ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)

ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool plicate, HashPosition *pos)

ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos)

ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, uint str_length, ulong num_index, int mode, HashPosition *pos)

ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compar, int renumber TSRMLS_DC)

ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC)

ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)

ZEND_API ulong zend_hash_next_free_element(const HashTable *ht)

void zend_hash_display_pListTail(const HashTable *ht)

void zend_hash_display(const HashTable *ht)

;

F. 北大青鳥設計培訓:怎樣快速學好PHP技術

怎樣快速學好PHP技術?我想這應該是大多數參加PHP培訓學習PHP的同學比較關心和想要知道的問題,本文java課程http://www.kmbdqn.cn/就給大家簡單談談怎樣快速學好PHP技術,告訴大家一些PHP學習方法。
第一、抱著良好的心態去學習學習PHP一定要保持一個良好的心態,切忌懷疑自己的學習方向和成果。
還記得你敲出的第一條命令在一個「黑漆漆」的窗口中顯示了什麼樣的神跡嗎?學習PHP絕非是件易事,但請不要懷疑你自己的方向和成果,你所付出的終將會給豐厚的回報。
如果一件事情結束的時候你還能保持像你開始那樣心態的話,那麼你將立於不敗之地。
第二、合適的學習方式和教材很多初學者比較傾向於找一些視頻教程來看,其實這真是極好的,但是你得找一些質量高、口碑好,最好是一些大型培訓機構內部的視頻。
但是請不要一直依賴視頻,畢竟視頻除了沒有互動之外,跟上課一樣的,所以看視頻的唯一缺點就是學習成本的增加,這個成本包括了取得費用和時間成本,所以在你什麼都不懂而且看書看「懵逼」的時候先看看視頻吧。
當你把PHP基礎命令用熟練了,理解簡單的服務原理並可以獨立配置簡單的服務的時候,那麼就去看書吧!看書可以大大的節省你的時間、金錢成本。
當然蘿卜白菜各有所愛,選擇什麼樣的學習方式和學習教材對每個人來說都是不一樣的,就跟談戀愛一樣,沒有最好只有最合適。
第三、不要抵觸「無聊」的英語基本上你學習PHP或者使用PHP一段時間以後,你會發現與其說是學習PHP操作系統,還不如說是學習如何閱讀英文呢。
隨著知識的深入,你可能會需要經常去搜索一些資料,當度娘不能滿足你的時候,你還得去找另一個男人---谷哥。
你跟谷哥講中文當然是可以的,但是有時候谷哥會用中文含蓄的跟你表達「我這里資料還是太少了,你去我哥哥(英文谷哥)那問問?」試問此時如果你不會用英文描述你的問題,或者看不懂外國牛人的回答,那時候真的有種想拿豆腐撞死自己的沖動。
而且說實話,語言的學習是非常有意思的一件事情。

G. 關於php學習,哪個網站資料比較合適

作為一個php開發人員,我可以推薦題主一些網站和博客:

如果題主像往php深度發展的話,這些網站和博客都非常有用處。


到後面你應該會使用到Yaf框架,Yaf框架是一個用純c寫的php擴展框架,以性能卓越著稱,在性能上目前開源框架里沒有比Yaf更快,性能更好的框架了,用過Yaf之後你就該往php源代碼,yaf源代碼方向去發展了,因為純粹的應用層面的開發這時候已經滿足不了你了,包括redis和memcached機制,這些都是你後期往php高級開發工程師方向發展需要做的東西。


其次你需要知道的一個網站就是pecl.php.net

pecl.php.net是一個php擴展的官方網站,在pecl上面你可以下到提交到官方的所有php擴展,比如你一定會用到的memcached和redis還有curl擴展,非常的方便,不管你是linux還是mac還是windows,都有你需要的,無論你是php5還是php7,你都可以找到你對應的版本進行開發工作。


pecl上的資源永遠都是最新的,他是官方資源。


將php.net/pecl.php.net/http://www.laruence.com/ 前兩個php官方站點,第三個是鳥哥的博客,都會在你的php生涯中接觸到。

祝你成功。

H. php工作原理

PHP的工作原理

:PHP的所有應用程序都是通過WEB伺服器(如IIS或Apache)和PHP引擎程序解釋執行完成的。

工作過程包括四個方面:

(1)當用戶在瀏覽器地址中輸入要訪問的PHP頁面文件名,然後回車就會觸發這個PHP請求,並將請求傳送化支持PHP的WEB伺服器。

(2)WEB伺服器接受這個請求,並根據其後綴進行判斷如果是一個PHP請求,WEB伺服器從硬碟或內存中取出用戶要訪問的PHP應用程序,並將其發送給PHP引擎程。

(3)PHP引擎程序將會對WEB伺服器傳送過來的文件從頭到尾進行掃描並根據命令從後台讀取,處理數據,並動態地生成相應的HTML頁面。

(4)PHP引擎將生成HTML頁面返回給WEB伺服器。WEB伺服器再將HTML頁面返回給客戶端瀏覽器。

PHP即「超文本預處理器」,是一種通用開源腳本語言。PHP是在伺服器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利於學習,使用廣泛,主要適用於Web開發領域。

PHP語言作為一種語言程序,其專用性逐漸在應用過程中顯現,其技術水平的優劣與否將直接影響網站的運行效率。其特點是具有公開的源代碼, 在程序設計上與通用型語言,如C語言相似性較高,因此在操作過程中簡單易懂,可操作性強。

閱讀全文

與深入理解php原理鳥哥相關的資料

熱點內容
查看dns地址命令 瀏覽:765
android錄屏工具 瀏覽:838
成都互動直播系統源碼 瀏覽:953
usb藍牙android 瀏覽:405
伺服器顯示error1什麼意思 瀏覽:708
python代碼精簡 瀏覽:457
文件加密了怎麼找到了 瀏覽:193
jellyfin插件怎麼選擇主伺服器 瀏覽:836
asp用戶注冊源碼 瀏覽:48
什麼是照片壓縮文件 瀏覽:392
java調用js代碼 瀏覽:979
崑山市民app怎麼修改身份信息 瀏覽:779
php登陸次數 瀏覽:744
python字元轉成數字 瀏覽:822
海川用的是什麼伺服器 瀏覽:376
口才是練出來的pdf 瀏覽:458
雲伺服器哪個公司性價比高 瀏覽:517
源碼論壇打包 瀏覽:558
php怎麼做成word 瀏覽:692
python批量生成密鑰 瀏覽:492