之所以這樣說“不要認為學PHP就不需要學C語言”,是因為一味的只學PHP而沒有C語言等這些基礎語言的支撐,是很難深入理解PHP的很多東西的。
這樣的例子其實很多,這裡我就舉這個例子吧:PHP的陣列和C語言的陣列的差別和連結。
學過C語言的朋友當然知道C語言裡有數組;
PHP裡也有數組,但他們兩個的功能幾乎差別很大,PHP的數組太多很好用的功能。那這是什麼原因?是不是有多種數組,你只是學其中一種數組?其實不是的。
根本原因是:C語言裡的數組是真正的數組,是在棧中申請的一段連續存儲的空間,這種空間一旦申請是不能再添加一個元素,再刪除某個元素,只能整體操作,要麼全部刪除,要麼重新再申請一個陣列。這就是真正的數組。
而PHP中的數組,其實不是這樣的數組,它是在堆中申請內存,然後用指針去指向頭地址,然後遍歷指針,這樣就可以刪除某一個元素,隨時添加一個新元素,因為它本質上不再是那種真正的數組,而是鍊錶。
那麼從這裡可以看出,C語言對於PHP的理解和學習意義很大。沒有C語言的鍊錶支撐,會讓PHP的那些特性出現的莫名其妙,漫天幻想也總是覺得腳不著地。
C語言中的鍊錶原理是實作C 裡的vector,list,map,等動態數組、鍊錶、集合、隊列的原理依據,也是實現PHP裡面的數組(本質是鍊錶實現的動態數組)的原理依據。
那麼上層語言的那些複雜的資料結構的理解也就變得順理成章了。對於PHP數組的那些操作也就變得很容易理解了。如:
在最後插入一個元素:
彈出一個元素:
#這些東西用起來是很舒暢的,不會給你彈出一個恐怖的黑窗口錯誤提示,但是舒暢的背後是需要基礎來支撐和理解的,犧牲編譯性能是它的事,但能否理解的通就是你的事了,理解不了就只能死記硬背,那就不舒暢了,因為會很容易忘記。
如何才能不容易忘記,那就要理解它,理解它的來源,理解它可行性的實現原理....一切才會順其自然。誰也沒有規定,你要學會必須要學的很痛苦才行。
知其然而不知其所以然,是學有所成的最大障礙,也是出現學習瓶頸的最大因素。
所以C語言的意義在於對上層語言更輕鬆的理解,上層語言中如:PHP,不是用來學鍊錶的,而是用鍊錶的。所以用PHP來寫個鍊錶其實意義並不大。
那隻是給見識很少的初學者進行一次「學術顯擺」而已。因為PHP裡連指針都隱藏了,又何談深入理解鍊錶?也難怪學C的看不上C 的,學C 的看不上學PHP的;難度不一樣,在有深厚內功的程式設計師眼裡,很多所謂的過來人其實是在做「譁眾取寵」的事,估計是那種無所謂只要能忽悠初學者就行的感覺吧。
學習要善於聯想,才能讓學習減負。關注學習心情,才能長遠。善於理解還是需要一定的實力、廣度和深度來支撐的。
所以,不要再認為學PHP就可以不要學C語言了,否則你理解PHP很多東西都難理解的通,沒有基礎只能靠幻想、背誦,也難深入和長久學下去,因為太累......同時學C語言也不是說你看了、學了就算過關了,關鍵是要會,要懂。
例如隨便給一個不懂電腦的人就能解釋鍊錶是什麼?有什麼特點,怎麼實現等等。你能說多少,才表示你會了多少。
想了解更多相關問題請造訪PHP中文網:PHP影片教學
#以上是不要認為做php就不需要學習c語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!