PHP為什么這么難學(xué)?
網(wǎng)友解答: PHP同JAVA,Python,c相比,應(yīng)該是相對簡單的一門語言,而針對自學(xué)者來說,那就需要一個可行的計劃,和足夠的耐心來學(xué)習(xí),如果全身心的投入編程中,四個半月就可以走馬上任
PHP同JAVA,Python,c相比,應(yīng)該是相對簡單的一門語言,而針對自學(xué)者來說,那就需要一個可行的計劃,和足夠的耐心來學(xué)習(xí),如果全身心的投入編程中,四個半月就可以走馬上任了,當然自己也得付出足夠的毅力與時間去實踐。
最好是當天學(xué)習(xí)到的知識當天消化,多敲代碼,多去嘗試著開發(fā)各種商城,系統(tǒng)等等。
下面我就想分享一下我剛開始學(xué)習(xí)PHP的時候,老師給我擬的一份四個半月學(xué)會PHP的學(xué)習(xí)大綱。總共分四個階段。
第一階段
html+css(兩個星期(10天課)周六周天完成京東商城首頁和注冊頁面)
第二階段
1.php基礎(chǔ)階段(10天課程,從php的語法開始學(xué)習(xí),到循環(huán)語句,條件語句...基本學(xué)習(xí)沒門語言開始學(xué)習(xí)的時候都要學(xué)習(xí)的基礎(chǔ))
2.mysqli擴展庫對數(shù)據(jù)庫的操作(3天)
3.mysql數(shù)據(jù)庫學(xué)習(xí)(創(chuàng)建表,增刪改查,數(shù)據(jù)庫和數(shù)據(jù)庫表的導(dǎo)入導(dǎo)出)(3天)
4.項目新聞列表分頁(利用以上學(xué)習(xí),使用a標簽的get請求方式實現(xiàn)分頁)(2天)
php進階階段
1)GD庫(制作驗證碼)
2)文件上傳,實現(xiàn)多文件和單文件的上傳(2天)
3)正則表達式(1天)
4)文件目錄(4天)
5)利用學(xué)的文件目錄知識(新聞項目——實現(xiàn)沒增加一條新聞就存入數(shù)據(jù)庫的同時生成靜態(tài)頁面,存到文件中)(2天)
6)PDO類對數(shù)據(jù)庫的操作(3天)
7)設(shè)計模式(3天)
8)面向?qū)ο螅?,接口,繼承,封裝等)(4天)
9)封裝文件上傳類,mysql類(增刪改查),驗證碼類(3天 ,一天一個)
10)session(利用session實現(xiàn)用戶登錄狀態(tài)和非登錄狀態(tài))(1天)
第三階段
1.js語法基礎(chǔ)(3天)
2.jq語法基礎(chǔ)(3天)——寫一個輪播圖和一個定時器
3.ajax和json基礎(chǔ)(3天)
4.ajax和json結(jié)合實現(xiàn)登錄效果,頁面不刷新請求服務(wù)器效果(2天)
5.redis基礎(chǔ)(2天)
6.mongodb
7.memcached
第四階段
tp框架一個商城(15天)
laraval框架一個博客(15天)(其中的一小點功能應(yīng)用memcached緩存實現(xiàn)點贊)
微信接口的調(diào)用(微信公眾號中用代碼調(diào)用接口實現(xiàn)獲取用戶信息,調(diào)用天氣接口,獲取每天的天氣)(5天)
小程序基礎(chǔ)(10天)
自學(xué)的話要了解到博客里面有什么功能模塊(并通過所學(xué)的知識實現(xiàn)他)
網(wǎng)友解答:盡管其它的一些答主都覺得這個題目有點不可思議,但對于初學(xué)者尤其是網(wǎng)站開發(fā)尚未完全入門的人,還是非常有可能存在這樣的疑問的。
比如,之前有個網(wǎng)友想做微信交互開發(fā)的程序,其實他的要求很簡單:就是公眾號粉絲發(fā)消息,然后根據(jù)不同的消息內(nèi)容自動給出回復(fù),這樣的需求使用官方的demo稍微修改一下就能實現(xiàn)。但他仍然反復(fù)問我:我需要買哪些專業(yè)的書籍?還要學(xué)什么php框架嗎?搞的緊張兮兮的。為什么會這樣?就是因為他還沒有搞清楚php到底是個什么東西,網(wǎng)絡(luò)上很多看起來相當高深的文章把他嚇壞了!
還有個更搞笑的事:一哥們學(xué)html和js相當入門了,有天突然問我:php不是通過echo輸出內(nèi)容的嗎?為什么我頁面中的php代碼解析不了、全部原樣輸出?大概看了他的代碼之后,沒發(fā)現(xiàn)什么問題。最后才發(fā)現(xiàn),他竟然把php代碼直接寫到了后綴名為html的文件中了,這還解析個鬼???
由此可見,新手剛學(xué)php時,由于各方面因素所導(dǎo)致的認知局限,覺得php難學(xué)是很正常的。同時也說明,目前市場上的php入門書籍或者相關(guān)的文章,接地氣還不夠,因為一些細節(jié)說明的不到位,會讓他們走很多的彎路,浪費大量無謂的時間。好吧,如果你是新手,請好好閱讀一下本篇回答,希望能給你一些幫助。
簡單認識一下什么是php所謂的php,其實就是一種服務(wù)器端的編程語言,它既可以獲取客戶端發(fā)送來的數(shù)據(jù),也可以將處理好的數(shù)據(jù)輸出并返回到客戶端。而很多網(wǎng)友之所以把它戲稱為“世界上最好的語言”,重要原因之一是它的語法規(guī)則和javascript太像了:會了js,php的使用也就水到渠成!
例如,我們在SublimeText3編輯器新建一個擴展名為php的文件,那么,該文件就會自動按php中的語法規(guī)則來進行編輯處理(如果新建的文件沒有被識別為php,也可以在編輯器中手工點擊下圖中的圓圈所示位置,再選擇php即可)。如下圖:
只要你稍微了解一點html標簽及css樣式方面的知識,就應(yīng)該能看懂上圖中的字符串是什么意思。
以上代碼中,只有包含在 <?php 和 ? 之間的部分才是php程序,<?php 和 ?其實就是php代碼的開始和結(jié)束標記(相當于html頁面文件中的標簽)。在php標記之外的代碼將被直接作為html的頁面內(nèi)容進行輸出,因為php程序是可以嵌入到html代碼中執(zhí)行的。
這段代碼其實就是聲明了3個字符串變量$st、$div和$p,每個變量的值都是字符串形式的html代碼。如果僅聲明一個普通的字符串變量,可以直接這樣:
$str = '我是字符串'; //這里用單引號或雙引號都可以,具體區(qū)別稍后再說
如果單純從語法上看,上述php代碼和js相比有兩處是明顯不同的:
第一,php中的變量必須使用美元符號$,而js是使用var關(guān)鍵字;
第二,拼接字符串使用圓點符號,不能用 + 號,+ 號在php中僅用于算術(shù)運算。
除了上述兩點外,其它規(guī)則與js都基本相同。比如,聲明變量時不用指定數(shù)據(jù)類型、聲明的同時可以=號賦值、語句要用分號結(jié)束、字符串數(shù)據(jù)需要用單引號或雙引號括起來等等,就連給代碼添加注釋的方式也是和js完全相同的?,F(xiàn)在,我們在上述代碼的php標記外圍再隨便輸入一些內(nèi)容:
<b我是在php標記外面的</b<br<br
<?php
…php代碼略…
?
<a 我也是在php標記外面的</b
然后在瀏覽器中直接運行這個test.php文件,通過控制臺查看其代碼如下:
通過查看代碼就可發(fā)現(xiàn),php文件中的所有代碼最終都會解析為頁面中的body元內(nèi)容素進行輸出,同時會自動加上head、html等標簽元素。
這就說明:php類型的文件其實就是一種頁面,只不過在它里面可以嵌入php程序代碼而已。當它里面沒有嵌入php代碼時,就可以當做普通的頁面文件來使用;當嵌入php代碼時,其通過echo輸出的內(nèi)容將與原有的html代碼融合在一起展示給用戶。當然,在echo之前,php可以先進行一系列的邏輯運算和處理,這些邏輯運算的代碼是不會展示在頁面中的。
如上圖所示,由于通過php程序輸出的內(nèi)容使用了class樣式,因此,最終的頁面展示效果中其字體為12px;而php標識外面添加的dom元素沒有使用此樣式,其字號明顯就要大一些。
所以,請不要把php想的多么復(fù)雜和高深,姑且把它當成另外一種類型的頁面就可以了。
面向?qū)ο笈c面向過程和js不太一樣的是,php同時支持面向?qū)ο蠛兔嫦蜻^程的編程方式,開發(fā)者可以在面向?qū)ο蠛兔嫦蜻^程二者中自由選擇其一或是混合使用。
什么是面向?qū)ο??簡單的說,就是把程序中所有可操作的東西都看成是一個對象,這樣就可以使用它們的屬性和方法并采用事件驅(qū)動的方式來對其進行各種操作。這個對初學(xué)者來說確實有相當?shù)碾y度,需要考慮的因素比較多,不是一時半會就能學(xué)的會的。
既然面向?qū)ο笥悬c難,新手完全可以從“面向過程”快速入門,而這也正是絕大多數(shù)php開發(fā)者所采用的方式。由于Web頁面解析本身就是很“過程化”的,而在頁面中嵌入面向過程的處理代碼是非常自然的手段,其實現(xiàn)工具就是大量的使用php函數(shù)。php中的函數(shù)非常多,字符串、數(shù)組、數(shù)值、日期等等,使用時按它們的語法格式調(diào)用就行了,真的沒啥技術(shù)含量。
總之一句話,別管他X的什么“對象”還是“過程”,理論上的東西先不管,自己能夠干起來、先解決問題再說!這就是我給初學(xué)者的建議。
我是人民郵電出版社簽約作者,歡迎大家關(guān)注我一起交流提高,謝謝!