DZ論壇在國內來說應用市場是最大的。客戶可能使用並不關注其內在代碼的好壞,但這個代碼核心確實我們php初學者的最好教程。
網上搜羅一下,也沒發現有詳細的分析文件或者分析列表。既然php代表了開源代表了共享。為什麼不這麼做呢?
況且DZ的代碼風格非常順暢,看起來很舒適。而且有很多好的習慣和思路在裡面,能學到很多東西.
開始從根目錄下的index.php開始分析。我知道DZ采用了自創的模板系統。而且非常好用。但我不打算根據網上朋友的經驗從include文件包開始分析。因為思路上太散了。所以我是根據頁面使用習慣開始分析代碼的。預計3天時間能出另一部分。
這一系列貼是我的初步分析篇。只是對其結構和代碼組建思維以我個人的想法進行簡單的分析。等全部工作完成,按現在的速度算(因為我也要上班,沒時間天天撲上面)。一個月全部的初步分析篇大致能完成。然後接下來的工作是根據初步分析進行仔細的分析和應用。大致上是這樣安排我的php自學過程的。
希望這點東西對和我一樣學習方法的朋友有效。
事實上我建立了一個文件目錄及作用表,但現在分析的內容比較少。所以暫時不發上來。等全部搞完了再發布。
說明:是基於最新的DZ6.1的核心代碼!文件上我根據我自己的判斷有的函數有的過程每一步都詳細說明,有的並沒有說得很清楚只是說明這個函數的大致作用。如果想根據我的的注釋版來分析。注釋就是作為各位的一個參考元素。如果有沒有注釋正確的,請跟貼說明。謝謝。附上我的總結筆記就是用來分享我從代碼中學到的東西
希望有和我同樣興趣研究DZ的志同道合者發論壇小刀給我。。眾人拾柴火焰高哈~
載入第一篇:1、DZ論壇核心代碼分析計劃--install包篇
我已經從最先的install文件包開始分析。已經分析完畢
Install篇
下面附上的是已經寫好描述的源文件。。。很多值得借鑒的思想。就在這裡留個坑吧。。。因為我電腦上東西亂仍。。某一年的某一天,我一不小心把我整合代碼盤全刪了。。。。很崩潰很崩潰。
分析沒到每一行,那樣太瑣碎了。這樣分析只是分析他的思路和思想。方法才是最重要的。函數自己隨手就可以查的。
下面呢,是我的分析日記。2天就分析完了。挺簡單的。不過很多東西我很少用,卻及其有用。值得借鑒。
以下為引用的內容:
2008年10月3日17:46:52
分析文件:install/index.php
1、
在代碼的頂部引入error_reporting()方法,設定php的錯誤提示等級。事實上php的配置文件可以配置,但是在每個文件重新設定這個錯誤提示等級,使錯誤提示更為靈活。
2、
在某些條件下通過使用set_time_limit()設定運行時間,並且通過ob_start()打開輸出緩沖器。最好用@來屏蔽錯誤。
3、
使用define()設定多個常量而不是變量供程序代碼使用。
分析文件:discuz_version.php
文件作用:定義版權的常量值
1、
因為這個文件是被引入調用其設定好的常量。所以從理論上任何文件都能調用。所以在一開始通過判斷是否IN_DISCUZ為真,如果不是,則停止整個程序的運行。
2008年10月4日9:42:22
分析文件db_mysql.class.php
文件作用:數據庫的鏈接類
1、
通過一個判斷來決定是采用mysql_connect(非持續性)還是mysql_pconnect(持續性)
2、
通過判斷來決定是采用mysql_unbuffered_query(執行操作,但不返回任何數據)還是mysql_query(執行操作,可返回數據)
3、
1和2兩個經驗點,大量使用了?:運算符;如:(exp1?(exp2):(exp3)).若exp1為真則exp2,反之exp3。
4、
//mysql_num_fields-取得結果集中字段的數目
function num_fields($query) {
return mysql_num_fields($query);
}
5、
//釋放結果內存
function free_result($query) {
return mysql_free_result($query);
}
2008年10月4日10:21:48
總結:因為被包含文件可以通過路徑進行訪問,為了保護文件的安全性,DZ在所有需要引用其他文件的前面定義了一個常量IN_DISCUZ。在被引入文件的頭部對這個常量進行判斷,如果沒有這個常量,也就是直接通過路徑進行訪問的。則不執行源代碼中的任何部分。這是個很好的保護源代碼措施。而且很簡單。