身為一名中級PHPer菜鳥..無聊了就愛在各個PHP論壇瞎轉.看到了好多PHP初學者都問到了很多相同的問題.而且我學PHP的時候也都遇到過.為了 讓PHP初學者少走一些彎路.所以突然神經恍惚.決定寫下此文章.僅供PHP初學者參考.如有錯誤.還望指出.不甚感激.
PHP其實是一種很簡單易學的語言.如果要精通PHP多則三年.少則一年就足夠了.但是為什麼三年之後我們照樣是菜鳥?
不知道從什麼開始.學習PHP我們不得不學習數據庫.學習架構.學習面向對象.學習前端.學習linux.學習協議甚至美工等直接導致了現在PHPer都是最累的一種程序員.
最累就不算什麼了.往往PHP會被認為是下等的程序.拿著最低級的工資.卻要掌握web方面幾乎全部的知識.這實在是不公平.
可喜的是 我們逐漸在國內看到了轉變.國內越來越多的公司從Java或者C#等轉到了PHP.所以各位PHPer一定要有自己的夢想.你們都會很牛B的.請堅信.
扯遠了.回到我要說的重點上.下面幾個問題包含著我遇到的問題.也許我說的不一定對或者你不一定同意我的看法.十分願意接受你的意見.總之我們只是想讓PHPer都雄起:-)
1.編碼的問題
這不光是PHP..只要是程序上.就會遇到.至少我和我身邊的人都遇到了.而且在Web方面.往往編碼問題更是非常難解決.非常難調試.有時候程序出了莫名其妙的問題,很難想到是編碼出了問題等等.
這些問題總是困擾著我們.所以我建議PHP初學者.一定要編碼統一.並且強烈建議統一為UTF-8.中文不建議使用GBK或者GB2312等.因為在AJAX中傳輸的時候是不認識這種編碼的.
如果要統一編碼,就要在編碼可能出現的任何地方注意一下.
1) header頭的編碼
個人建議在你的PHP中都應該加上下面這句話(特殊header除外)
復制代碼 代碼如下:
header("Content-type: text/html;charset=utf-8");
這樣可以避免一些問題.比如我們可以看到有些網站submit後就是一個alert然後跳轉.但是他們沒有設置編碼.如果他的編碼跟浏覽器的默認編碼不一致.就會出現亂碼了.
你是單純的HTML.一定要記得把meta的編碼標簽放到title標簽前面. 如果你不理解就記住把編碼的信息放到head標簽的第一行就可以了.最終的效果是這樣的
復制代碼 代碼如下:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
2) 文件的編碼
我們保存文件的時候,選擇編碼一定要統一.如果按照上面的.我們就應該選擇UTF-8.
一般的編輯器都有此文件的編碼信息.如果你發現不是UTF-8.請馬上更改.
比如我們在Dreamweaver中打開了一個模板文件.發現右下角顯示 GB2312(簡體中文).此時不要做任何更改.馬上CTRL+J 然後選擇編碼更改成UTF-8模式並保存.
文件的編碼不一定是PHP文件的.也得保證你的JavaScript文件與css文件都為UTF-8編碼.
另外還有一個重要的一點.就是BOM..這個東東PHP是不太歡迎的.所以我們在保存的時候要選擇UTF-8無BOM格式.如果你用的編輯器是UE.那麼請你著重注意這一點.
3) 數據庫的編碼
這個我就不想多說了.網上有太多的文章.如果你是MySQL記得每次連接後進行SET NAMES = ‘utf8′就可以了.並且那個utf8中間是沒有橫線的.
2.MVC的問題
程序員理論上來說應該是個完美主義者.他們不光想著把程序寫的運行就可以了.而且還要優雅.
但是話說回來.把程序按照MVC做了以後我們的代碼就優雅了嗎? 答案當然是否定的.
學習架構是一個理解的過程.當你真正體會到這個架構的好處的時候.才會理解其真正的含義.切勿盲目.
有時候我們會做這樣的打算.用這個月的時間去學習MVC.好吧.我想你應該這樣去做.你學會給自己定目標了.
但是一個月後我們也許並不能真正的理解MVC..但是至少我們會根據他的模式他的基本.換句話說也許我們沒有學會葵花寶典.但是我們應該會用辟邪劍法了.
3.面向對象的問題
關於PHP面向對象的問題.一直都糾纏不清.有的人不覺得PHP面向對象是個好的東西.有的人甚至不認為面向對象是個好的玩意,比如Linus.
我們不必去糾纏這個東西到底好不好.至少我們應該知道從面向對象誕生到現在.經過了這麼多年的演變.運用到各種項目甚至語言中.我們有理由相信存在即有其道理.
實踐是檢驗真理的唯一標准.這麼多年面向對象越發展形勢越好.看來我們學習就變得是種必須了.
與一些架構的知識類似.面向對象也不是那麼好學的.面向對象是種理念.但是具體到某種語言的時候.其意義也會發生一些微妙的變化.
PHP的面向對象很靈活.再加上其特有的魔術方法.會造就出一種特別形勢的面向對象.也許這跟你平時看Java的面向對象不太一樣.
不一定把你需要的方法放到一個類中就是面向對象.當你真正體會到面向對象給你的編碼帶來快捷.帶來方便.你就對面向對象有更深的一層理解了.
正所謂欲速則不達.切勿心急.你想幾天之內理解相對論那純粹是扯淡.
4.算法的問題
似乎PHP與算法總是相距甚遠的.PHP大多數算法都是基於數組實現的.而我們又知道PHP的數組的特性就注定當數組變得非常大的時候.效率會直線下降.
其實PHP就是個做網站的.大家不要也不必給她帶什麼高帽子.在Web方面尤其是在PHP所服務的前端的實際情況下會涉及到算法的地方會非常少.
PHP的算法面試題無非就是對數組或者對字符串的操作..動動腦子加上手冊.那基本就沒問題了.
那你也許會問.我想學習PHP.那我還學習算法嗎?
我覺得你需要學.並且更需要學數據結構.這門功課就像是一門內功.會在潛移默化中影響你的編碼.
這時候再配合上我們前面的辟邪劍法.恭喜你 你已經學會葵花寶典了!
5.框架的問題
PHP的框架是各種語言中最多的.用不用框架.選什麼框架這又成為一個爭議的話題..
我的建議是非常推薦學習至少一款框架.這可以加深你對PHP的認識.我們學習框架不是說要學這個框架怎麼用.怎麼做項目.
我們要去看它的源碼.看看他是怎麼實現的.這時候你就可以選擇自己開發一個小型的框架.不求做的多好.不求別人多少項目去運用.
我們只是為了學習而已.
6.JavaScript的問題
可以說我看過這麼多語言.最神奇就莫過於JavaScript了.平時Java一直宣稱自己一切皆對象.其實我更覺得JavaScript才是一切皆對象.
JavaScript好學嗎? 好學!其實在平時Web運用時候.一般的JavaScript操作就是DOM操作.
JavaScript難學嗎? 難學!如果我們被其他語言的面向對象的思維束縛了.就很難理解JavaScript的面向對象.並且JavaScript裡面概念也非常多.
prototype arguments call apply callee caller 閉包等概念就讓我們不知所措.再加上詭異的JavaScript的代碼風格與其難調試的特征直接導致我們這些菜鳥避而遠之.
曾經我轉發過一段實現document.ready的代碼.其詭異程度不得不佩服.
個人覺得看一些JavaScript框架的源碼就是最好的學習方法.曾經在寫我的PHP框架的時候.由於使用了統一入口+自己定義的URL規則.所以再使用普通屬性為get的form的時候就會獲取不到參數.
這時候我就想到了jQuery.form中的formSerialize方法.摘選出來並做了一些修改.就可以拿來使用了.
7.CSS問題
我之所與把CSS跟JavaScript分開來說.我覺得CSS的學習更有特點.
其實要我說CSS是最簡單的東西了.我們只是知道了一些基本的CSS屬性.寫頁面絕對不成問題.
CSS的主要特征在於必須動手.你看N本CSS的書不如實際動手去寫一個頁面.
CSS另外一個特點就是得多試.也許這個屬性不能達到你的效果.那你就換一個.這也是最笨最有效的辦法:-)
當然 這只是初級CSS的要求. 會了這些之後 我們還得兼容浏覽器. 其實這個也不難 無非就是幾個浏覽器同時開著一個屬性一個屬性的試.
也可以熟記一些hack 比如IE6認識_ IE都認識*等.如果你覺得這樣寫CSS不夠標准.那麼把hack放到不同的css文件中.比如ie6的就叫ie6.css
然後再頁面上用下面的代碼就可以了.
復制代碼 代碼如下:
<!--[if lt IE 6]>
<link href="css/ie6.css" rel="stylesheet" type="text/css" />
<![endif]-->
更高級的當然是用戶的體驗與設計了.這個我也不懂就不說了@_@ 希望達人補充.
8.linux的問題
個人強烈建議每人的電腦上都安裝一個linux系統.如果你覺得太折騰 可以選擇wubi方式安裝Ubuntu.對於懶人這個是最簡單有效的方法了.
你無聊的時候可以下載一份PHP源碼自己編譯下試試.切忌apt-get.因為往往服務器版本不是rhel就是centos.那裡是沒有這個命令的.
而且apt-get到的往往不是最新的版本.並且又不能自己定制.
linux總會出現這樣活著那樣莫名其妙的問題.比如環境稍微不一樣就編譯不通過.服務起不來.
這時候不要著急.看錯誤提示 看日志.Google下自己嘗試解決.
編譯完不要覺得就完了 試試不同的配置.而且修改一下源碼再編譯試試.
比如我們下載了一份nginx的源碼.然後修改下header頭等一些地方. 就可以編譯一份屬於自己的HTTP Web Server了.
當然 你如果叫BWS或者GWS也行:-)
還有個問題 linux需要背命令嗎? 這個是無可厚非的. 熟記一些常用的命令可以提高速度.這點我需要反思.經常一些常用的命令還需要看下參數..
另外一個就是Shell的問題. Shell其實不難.但是語法在我看來比較丑陋@_@. 看看wiki就可以學習大半了..主要還得是聯系. 我們可以看到一個現象.一些公司在招聘高級PHPer的時候這條也列為必須條件了.
其實網上linux的資料非常多. 大多數你遇到的問題別人都會遇到.所以善於用Google. 並且熟讀英語.
9.語言的問題
這個的問題就太多口水戰了.最終誰也沒有戰勝誰.我們不必去參與這些無聊的事情.這些都是年輕糞青要做的.
你再牛B你有Linus牛B嗎? 他噴C++的噴了這麼多年.C++怎麼樣了?
所以我們不必糾纏這些.做好自己做的就OK了.
既然你選擇了PHP.就不要猶豫.
也許我們在做項目的時候PHP顯得不夠用了.那我們可以用Java或者C來做個中間件.這又何嘗不可.
一種語言發揮她的最大最用才是真理.
10.態度的問題
態度一定要謙虛謹慎. 這是作為一個程序員應該有的美德.切勿自我膨脹.
你學的越多 你就會發現自己不足就越多.
等你牛B了你可以說一些狂妄的話.但是現在我們都不牛B.至少如果你看到我寫的這篇文章.你應該還不太牛B. 我說了這篇文章是面向初學者的:-)
11.女人的問題
呃..這個自己解決吧@_@