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