PHP開發(fā)大牛親述學(xué)習(xí)過程
Jun 13, 2016 pm 12:29 PM
PHP開發(fā)大牛親述學(xué)習(xí)歷程
想要學(xué)習(xí)PHP,首先你得知道PHP開發(fā)的作用。大家可能會簡單的說是做網(wǎng)站的,因為PHP在WEB領(lǐng)域應(yīng)用最為廣泛,大多數(shù)網(wǎng)站都是用PHP做的。準確的說PHP是做網(wǎng)站的后端開發(fā)的,其實我這樣說還不算正確,PHP只是做后端開發(fā)的,但不只是網(wǎng)站而已。就像現(xiàn)在比較火的APP開發(fā)也可以用PHP做后端處理。
PHP相對于其他語言,比較簡單,相對好上手,比較適合零基礎(chǔ)的人學(xué)習(xí),但是就像我上面說的那樣,PHP只完成了一個網(wǎng)站或者系統(tǒng)的一部分。
一個運行的網(wǎng)站或者軟件系統(tǒng)可以分為前端頁面,后端程序,數(shù)據(jù)庫,linux。而處理后端的PHP僅僅是只占了四分之一,PHP本身的東西其實并不多,真正多的東西都在PHP之外,所以單純的掌握PHP并不足已做出什么產(chǎn)品,可能連工作都找不到。
前端:但凡是一個網(wǎng)站都必須得讓人能看得見,使用得起來。任何一個網(wǎng)站可以沒有數(shù)據(jù)庫,可以沒有后端程序,但是必須得有前端頁面,而這也是最早期的網(wǎng)站形態(tài)—一 一個只能展示文字和圖片等信息的靜態(tài)頁面。
掌握靜態(tài)網(wǎng)頁的制作技術(shù)是學(xué)習(xí)開發(fā)網(wǎng)站的先決條件。這里面的學(xué)習(xí)包括 HTML,css,javascript,它們可以直接使用瀏覽器運行。
HTML負責(zé)網(wǎng)頁的結(jié)構(gòu),用它來規(guī)定網(wǎng)頁排版中哪部分是文字,哪部分可以放圖片,音頻文件,視頻文件放在網(wǎng)頁中什么位置顯示等。
CSS可以把這些文字,圖片,視頻等信息擁有一定的合理好看的樣式,可以定義文字的大小,顏色,圖片的大小等等。
javascript可以讓網(wǎng)頁與人產(chǎn)生交互,就像你登錄網(wǎng)站,點擊登錄按鈕就會跳轉(zhuǎn),把鼠標放到菜單,菜單就會自動展示下拉,逛淘寶時,把鼠標放在產(chǎn)品圖片上,圖片就會放大等等。
學(xué)習(xí)技巧和心得:初次開始學(xué)習(xí)html時,我是以w3c手冊為學(xué)習(xí)教材,但是越往后看越覺得里面寫的東西瑣碎繁多,手冊里介紹了很多標簽,標簽又有很多屬性,它們各自又代表的什么含義。
就像下面的這個表示表格的一些標簽,這是手冊給出的概念,看了之后似乎也明白又不太明白,看完又沒記住,回想起來,還是一頭霧水,像是什么也沒學(xué)到。
前端的知識比較鎖碎,沒有太多邏輯性可言。其中html和css的任何元素標記都要親自動手實踐,大部分新手之所以覺得難學(xué),看不懂手冊概念,主要是學(xué)習(xí)方法不對,“懶”是首要原因,因為不動手實踐,光看概念是沒什么用的。所以克服掉懶的習(xí)慣,動起手來寫一個HTML標記,運行之后看看效果吧,這樣你才能真正掌握住。
不過,我建議初學(xué)的同學(xué)還是先看視頻為好,因為操作效果都能看的到,手冊這東西作為工具使用。
關(guān)于html和css中的標簽和屬性你沒必要完全一個不差的記住,因為這沒有太大的意義,等你做了一個小項目之后,你只需要記住常用的就行,其他的做到有印象,用的時候能想到,然后查手冊即可。當你學(xué)完之后一定要做一個簡單的小項目,你學(xué)習(xí)時針對的都是散亂的知識點,最后要把這些東西整體的用一遍。
嚴肅說來,HTML是否被認為是“真正”的編程語言并不重要——它依然是一種需要學(xué)習(xí)的新技能。嘗試新的東西是非常可怕的。你需要在處于這種未知的弱勢地位時也敢于勇往直前,不要急頭急腦一下子就想把東西學(xué)會,要沉得住氣,踏踏實實的心態(tài)一點一點的來,而且失敗和不確定也沒有關(guān)系—— 事實上,它們都是成功的重要組成部分。
再說下Js,在上面我已經(jīng)闡述過了Javascript,(簡稱Js),但是在這里為什么還要再強調(diào)Js呢?因為很多人都說不用學(xué)Js了,直接學(xué)Jquery(簡稱Jq)就行。Jq是什么,Jq是一種js的框架,它可以使開發(fā)速度更快,有很多做好的功能和特效,直接使用就行了。
上面說了jq是Js的一種框架,它的本質(zhì)還是Js寫的。Js能完成的,理論上來說jq也能完成,但是并不是100%都能處理,而且jquery能做的,Js 100%能完成。jquery只是工具簡化操作,底層還是js。只有在學(xué)好原生js的基礎(chǔ)上,才能更好的學(xué)習(xí)jquery或其它框架和處理前端問題。
后端:到這里才說到我們的PHP。如果說HTML和css是看得見的部分,那么PHP就是看不見的部分。它負責(zé)在后面處理數(shù)據(jù),然后返回給用戶。
當網(wǎng)站由開始的靜態(tài)頁面發(fā)展到現(xiàn)在有了后端程序,那么網(wǎng)站才有了業(yè)務(wù)邏輯。簡單的說,就像一臺計算器,你在前端輸入數(shù)據(jù),然后點擊提交,PHP給你處理運算,然后返回到前端,這時你就看到了結(jié)果。需要特別說明的是PHP并不能直接在瀏覽器中運行,它需要Apache環(huán)境支持,放在Apache服務(wù)器里面,然后用瀏覽器用訪問,這個需要大家在學(xué)習(xí)過程中配置一下,非常簡單。
學(xué)習(xí)PHP,推薦學(xué)習(xí)《PHP從入門到精通視頻課程》的視頻教程。做PHP開發(fā),這個教程幾乎是每個PHP學(xué)子必看的精品教程。網(wǎng)上有很多這個教程的下載,大家可以搜一下51cto學(xué)院,上面有很多PHP教程。
慢慢的隨著講解的知識不斷增多,不懂的問題也開始出現(xiàn),剛開始時我就簡單用腦子記著,想以后再解決。但是后來再回想,發(fā)現(xiàn)有一些竟然記不起來了,慢慢的,不懂的問題越積越多,我害怕遺忘掉我不想遺漏任何我沒學(xué)會的地方,哪怕是一個暫時沒細想,細想一下就能懂的簡單問題。如果忘掉了,可能以后再也想不起來了,這對我來說是個很難彌補的損失,我是個完美主義者。
我想起了學(xué)習(xí)html時的教訓(xùn),還是不能懶!我建立了一個文本,專門記載我不懂的,難以理解的,還有暫時沒有解決的種種問題,甚至是靈機一動偶然想到的問題,也都統(tǒng)統(tǒng)不拉的記下來。?
我希望大家在學(xué)習(xí)的過程中也能養(yǎng)成寫記問題的習(xí)慣,好記性不如爛筆頭么,因為學(xué)習(xí)過程中難免會碰到很多不懂的問題,但是你又不能一直等著這個問題解決,你需要繼續(xù)前進,而時間久了,你可能就會遺忘掉。每學(xué)到一個腳本難點的時候,嘗試對別人講一遍,你能講清楚才說明你真的理解了。
除了記問題,我還把老師講的知識,用自己的話按自己的理解自己的話寫下來,這就如同是跟別人講一遍似得。記住,要用自己的話自己的思路寫,忘記老師的原話,這樣別人的知識才會轉(zhuǎn)化成你的。實踐也是強化知識理解的過程,千萬不要只看教程和學(xué)知識點,最重要的是實踐,大多數(shù)人包括我,曾都是跟別人學(xué)起來像是學(xué)會了,到了自己做的時候卻很難進行下去。
當你看完教程掌握了里面所述的內(nèi)容后,可以按照老師講的例子或者自己構(gòu)思某個應(yīng)用場景,然后從頭寫起。你會發(fā)現(xiàn)很多問題,也會加深對教程知識的理解。這樣通過不斷地練習(xí)和獲取反饋,你的開發(fā)功底會很快提升。
MySQL數(shù)據(jù)庫:當網(wǎng)站技術(shù)再往后發(fā)展時,人們需要網(wǎng)站處理存放更多的數(shù)據(jù),來滿足現(xiàn)實生活中的業(yè)務(wù)邏輯,這時候就需要數(shù)據(jù)庫了。
數(shù)據(jù)庫是什么,按字面的意思,數(shù)據(jù)庫說白就是存放數(shù)據(jù)的地方,它可以是一段文字,一張圖片或者一個文件的URL地址等等。比如,當你想瀏覽一篇文章時,你點擊文章標題,這個請求會跳轉(zhuǎn)到PHP文件那里,PHP再從數(shù)據(jù)庫取出你想看的那篇文章。
PHP和數(shù)據(jù)庫是密不可分的,PHP后來在網(wǎng)站開發(fā)中更多的任務(wù)就變成了操縱數(shù)據(jù)庫了。數(shù)據(jù)庫有很多種,準確的說咱的這個數(shù)據(jù)庫是mysql數(shù)據(jù)庫,只是因為php和mysql關(guān)系非常好,它們兩個是完美的搭配。所以我們學(xué)習(xí)PHP開發(fā)學(xué)習(xí)的數(shù)據(jù)庫就是Mysql數(shù)據(jù)庫。
學(xué)習(xí)mysql時,我同樣采用了學(xué)習(xí)PHP時的學(xué)習(xí)方法:記問題,寫筆記。還是想在強調(diào)一遍:要用自己的話寫,忘記老師的原話,這樣別人的知識才會轉(zhuǎn)化成你的。該通過做一個小項目強化一下了。比如去做一個文章或者商品管理系統(tǒng),做做常用的增刪改查。就像下面的添加這個商品功能頁面,無非就是用PHP把前端用戶填寫的數(shù)據(jù)存放到數(shù)據(jù)庫。編程只會在最初的幾天里是個有意思的事情,之后大多會出現(xiàn)厭煩厭學(xué)。所以興趣并不能完全成為編程的動力。通過項目開發(fā),你會發(fā)現(xiàn)更多的編程動力是生活中需要的實際需求和通過高強度高密度的學(xué)習(xí)和思考后解決需求后的強烈成就感。
框架:框架說白了就是一個已經(jīng)幫你完成了部分功能的程序部件結(jié)構(gòu)。基本上到了公司動手做起真實的項目中都是使用框架來開發(fā)的,它可以使你的開發(fā)速度更快。為什么?就說網(wǎng)站開發(fā)吧,比如你要做網(wǎng)站中的驗證碼功能,你需要動手自己從0開始寫,同樣的,寫一個文件上傳程序,你需要動手從0開始寫。這時你會問,我做什么不都是要動手寫的嗎?
但是你忽略了一個問題,驗證碼,上傳文件等等這些都是網(wǎng)站中幾乎不可缺少的基本功能,每個網(wǎng)站都要用到,這時候你可以動手把這些常用的功能寫好,然后封裝起來,用的時候直接調(diào)用就行了,大大減少了代碼的重復(fù)性,而這其實也就是框架了。
先別說自己做一個框架,因為完成一個好的框架不是一項簡單輕松的工作,而且更需要高的知識技術(shù)水平。所以我們要學(xué)習(xí)使用別人做好的專業(yè)的框架,大都說中小型公司都是使用的別人的框架,PHP常見的有thinkphp, ci, yii,我個人推薦學(xué)thinkphp,這個是國人做的,輕量級,學(xué)起來更容易些,使用的公司也比較多。
MySQL優(yōu)化技術(shù):當你學(xué)會了PHP,mysql的一些增刪改查技術(shù)后,你可以嘗試做一個簡單的文章管理系統(tǒng)了,能發(fā)布,修改,和查看文章。
但是,你試想一下,會不會遇到這樣一個問題:當你查看一篇文章,MySQL需要從文章表中尋找你需要的那一篇取出來,此時你的文章已經(jīng)很多了,比如有一百萬篇,或者一千萬篇時,mysql再從里面找一篇文章是不是越來越耗時了,平常文章量少的時候也許1秒鐘就能打開一篇文章,此時可能需要十來秒,你愿意等嗎?用戶愿意等嗎?就像新浪網(wǎng),騰訊網(wǎng)這樣的大型新聞網(wǎng)站,如果用戶看一篇新聞需要等很長時間,那能行嗎?所以我們要對mysql進行優(yōu)化,讓數(shù)據(jù)庫盡量用更少的時間找到我們需要的東西。
優(yōu)化手段主要包括:
1,表的設(shè)計 (可以減少數(shù)據(jù)的冗余,節(jié)省磁盤的開銷)
2,mysql的索引優(yōu)化 (利用索引,可以加快查詢數(shù)據(jù)的速度)
3,mysql的查詢優(yōu)化。 (加快查詢的速度)
4,分區(qū)分表 (把一個大表分成幾個小表,提高查詢的速度)
頁面靜態(tài)化技術(shù):當你學(xué)會了MySQL優(yōu)化技術(shù),切不要沾沾自喜,新的問題的依然很多??梢栽僭囅胍幌拢阂粋€人訪問時,和大量的人訪問時?當你一個人訪問也許很快,但是大量的人訪問,mysql要處理大量的請求,它是忙不過來的,mysql支持的請求數(shù)是有限的,這很容易理解吧。
Linux:我們的程序,數(shù)據(jù)庫,整個網(wǎng)站終歸都是放在linux系統(tǒng)的服務(wù)器上的,對于一般的程序員能做到基本的配置即可?;久?、操作、啟動、基本服務(wù)配置(包括rpm安裝文件,各種服務(wù)配置等);會寫簡單的shell腳本和awk/sed 腳本命令等一般公司有相應(yīng)的運維人員管理。如果對這個有興趣,后期可以繼續(xù)深挖。
非關(guān)系型數(shù)據(jù)庫Redis/Memcached,怎么又是數(shù)據(jù)庫?,不是已經(jīng)講過了mysql了?是的,上面咱們說的mysql是關(guān)系型數(shù)據(jù)庫,所以這兩個叫做非關(guān)系型數(shù)據(jù)庫。為什么需要它們?與mysql不同的是Redis和Memcached 的數(shù)據(jù)是放在內(nèi)存中的,mysql是放在磁盤中的,而訪問內(nèi)存中的數(shù)據(jù)速度要遠大于放在磁盤中,這就是它們的好處。那為什么還要學(xué)習(xí)MySQL,干嘛不直接學(xué)習(xí)使用Redis和Memcached?因為MySQL更適合海量存儲數(shù)據(jù),Redis和Memcached是在內(nèi)存中的,需要很大的內(nèi)存才行,而且放在內(nèi)存中的數(shù)據(jù)也容易丟失,如果機器故障重啟內(nèi)存就釋放了。一般互聯(lián)網(wǎng)公司大都采用MySQL + Redis,或者 MySQL +Memcached的方式進行架構(gòu);Redis/Memcached都是基于內(nèi)存的,所以它們的速度非常快,包括讀和寫都很快,一般用在一些高并發(fā),大數(shù)據(jù)量訪問的場景之下。
說到最后,總之,學(xué)習(xí)PHP并不難,難的是一個體系。我寫的總體比較基礎(chǔ),主要是針對一些剛?cè)腴T學(xué)習(xí)的同學(xué),在整體上給建立一個完整的知識體系。
在這條路上,可能盡管你如此努力,可還是會遇到你難以理解的問題。同樣,我自己曾經(jīng)連續(xù)半個月失眠,為了考慮解決那些棘手的問題。
要想確切地掌握編程語言的每一個特質(zhì)是不可能的——它們是野性難馴的猛獸,如果你認為編程是一種易于學(xué)習(xí)的簡單技能,那可能就會南轅北轍。作為一個程序員,需要學(xué)習(xí)的東西是無限的,并且一種不能滿足的持久遺憾感,即使是該領(lǐng)域的專家也時常會有。
把心態(tài)放正,一步一步的來,并將任務(wù)分解成更小的任務(wù)。學(xué)習(xí)PHP吸取知識是擅長它的第一步驟,一定要給自己信心,嘗試用更多的方式去考慮一個問題。最后,感謝網(wǎng)友徐杰的精彩思路,讓我們熟悉學(xué)習(xí)PHP的步驟,起到借鑒的意義。

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

std::chrono is used in C to process time, including obtaining the current time, measuring execution time, operation time point and duration, and formatting analysis time. 1. Use std::chrono::system_clock::now() to obtain the current time, which can be converted into a readable string, but the system clock may not be monotonous; 2. Use std::chrono::steady_clock to measure the execution time to ensure monotony, and convert it into milliseconds, seconds and other units through duration_cast; 3. Time point (time_point) and duration (duration) can be interoperable, but attention should be paid to unit compatibility and clock epoch (epoch)

ToaccessenvironmentvariablesinPHP,usegetenv()orthe$_ENVsuperglobal.1.getenv('VAR_NAME')retrievesaspecificvariable.2.$_ENV['VAR_NAME']accessesvariablesifvariables_orderinphp.iniincludes"E".SetvariablesviaCLIwithVAR=valuephpscript.php,inApach

PHPhasthreecommentstyles://,#forsingle-lineand/.../formulti-line.Usecommentstoexplainwhycodeexists,notwhatitdoes.MarkTODO/FIXMEitemsanddisablecodetemporarilyduringdebugging.Avoidover-commentingsimplelogic.Writeconcise,grammaticallycorrectcommentsandu

CTE is a temporary result set in MySQL used to simplify complex queries. It can be referenced multiple times in the current query, improving code readability and maintenance. For example, when looking for the latest orders for each user in the orders table, you can first obtain the latest order date for each user through the CTE, and then associate it with the original table to obtain the complete record. Compared with subqueries, the CTE structure is clearer and the logic is easier to debug. Usage tips include explicit alias, concatenating multiple CTEs, and processing tree data with recursive CTEs. Mastering CTE can make SQL more elegant and efficient.

WhensettingupMySQLtables,choosingtherightdatatypesiscrucialforefficiencyandscalability.1)Understandthedataeachcolumnwillstore—numbers,text,dates,orflags—andchooseaccordingly.2)UseCHARforfixed-lengthdatalikecountrycodesandVARCHARforvariable-lengthdata

When using PHP preprocessing statements to execute queries with IN clauses, 1. Dynamically generate placeholders according to the length of the array; 2. When using PDO, you can directly pass in the array, and use array_values to ensure continuous indexes; 3. When using mysqli, you need to construct type strings and bind parameters, pay attention to the way of expanding the array and version compatibility; 4. Avoid splicing SQL, processing empty arrays, and ensuring data types match. The specific method is: first use implode and array_fill to generate placeholders, and then bind parameters according to the extended characteristics to safely execute IN queries.

In PHP, you can use a variety of methods to determine whether a string starts with a specific string: 1. Use strncmp() to compare the first n characters. If 0 is returned, the beginning matches and is not case sensitive; 2. Use strpos() to check whether the substring position is 0, which is case sensitive. Stripos() can be used instead to achieve case insensitive; 3. You can encapsulate the startsWith() or str_starts_with() function to improve reusability; in addition, it is necessary to note that empty strings return true by default, encoding compatibility and performance differences, strncmp() is usually more efficient.

There are three key ways to avoid the "undefinedindex" error: First, use isset() to check whether the array key exists and ensure that the value is not null, which is suitable for most common scenarios; second, use array_key_exists() to only determine whether the key exists, which is suitable for situations where the key does not exist and the value is null; finally, use the empty merge operator?? (PHP7) to concisely set the default value, which is recommended for modern PHP projects, and pay attention to the spelling of form field names, use extract() carefully, and check the array is not empty before traversing to further avoid risks.
