php一道走來

來源:互聯網
上載者:User
php一路走來

從2012年就已經接觸php了,一直到現在做了已經兩三年了,也走過無數的彎路,也通宵熬過無數次夜,看過各種各樣的PHP書籍,部落格等,做一下總結,全當是對自己過去這一段時間的總結。

php是一個弱類型的語言,所謂若類型的語言並不是之沒有類型區分,而是說沒有明顯的類型定義,php的變數不需要提前定義,只需要一個$符號就可以了,如:$a/$b/$c。 php變數在底層的實現是用c中的共同體(Union)實現的,只是php變數會在操作的時候自動進行類型轉換,其次,php的變數採用的是“引用複製”和“寫時複製”的機制。

php學到後期會有種不知道該怎麼學習的狀態,感覺功能的實現都可以實現,沒有什麼東西可以學習,確實php到後期本身沒有什麼好學的,此時可以嘗試學習一些設計模式,去看一些開源的代碼,去嘗試著封裝一下MVC,嘗試著用原生態的PHP語言去實現一些架構中的封裝。看完這些之後,可以嘗試的去看一下php的源碼,也許你此時會發現php的源碼還是很難理解的,沒關係,一開始都是這樣,你可以在這之前去重新學習一下c語言和c++,此時也許你會發現從c到c++其實是一個封裝的過程,你也會發現,php源碼中用到了大量的結構體(struct),define,typedef,以及大量的一重二重三重指標,你會發現php不是沒有什麼可以學習,是需要更深層次的挖掘,好了接下來的日子就有事情可以幹了,看看PHP的源碼,嘗試著實現一下php的擴充,放到自己的環境中調用一下。

php後期並不是沒有什麼可以學習的,而是它本身語言就比較簡單,如果只是學習應用程式層面的東西那就真的沒有東西可以學習了。好了大致看完源碼之後你會發現php之後會被解析成opcode然後才會被執行,你會知道apc的用法,memcache以及radius的/概念,你會對php有一層更加深入的瞭解,那下面咱們轉向最佳化方面。

php是一門web開發語言,所以涉及到web就要涉及到最佳化,怎麼說最佳化呢?網站的瓶頸一般存在與兩個地方一個是資料庫的瓶頸,一個是php語言的瓶頸,資料庫方面:表結構的最佳化,mysql引擎的選擇,索引的添加,縱向分表,橫向分表,主從資料庫讀寫分類,叢集。php方面咱們可以從最佳化view層中的css 和 js說起,對css和js進行壓縮合并,圖片進行處理,表徵圖進行合并等操作。controller層對sql語句進行最佳化,減少關聯查詢和子查詢的使用,可以把sql語句拆開執行,然後在拼合資料。採用頁面靜態化處理部分不經常變動的頁面,採用memcache/apc/radius作為資料庫緩衝,緩解資料庫壓力,採用opcode功能減少php的解析(php5.5之後內建opcode捨去了apc,也可以通過apc實現),選擇速度更快的nginx代替apache服務,對伺服器做叢集等等。當然php本身寫法上也有最佳化技巧比如單引號與雙引號的使用,include 和 requice的使用等等,不再敘述。至此你需要學習的東西還有很多。

當感覺學習一門弱類型語言沒有什麼提高的時候,也許你可以再去學習一下強型別語言,比如說學習java做jsp的時候你會發現jsp中並沒有你所理所當然的session,你可以選擇用map、hashmap等已有的資料結構來封裝session,你可能已經習慣了架構給你提供的功能,但是在這裡,你確實需要自己去封裝一個資料庫的連結讀取並把資料返回到一個map中的方法以方便你的開發。

當你感覺學習php沒有什麼提高的時候,也許你應該去學學linux,其實不需要去看多少書,換上一個linux系統,嘗試著去用它。你會發現linux其實要比windows更好用,你可以去搭配一套lnmp/lamp,嘗試去寫一點shell代碼,去自動備份你的資料庫,甚至去論循你的php以實現某種功能,你也可以很方便的配置php的xdebug去嘗試用斷點調試php程式,也可以很方便的去寫一些php的擴充,配置memcache等等等等,你可以嘗試使用vim去寫一些東西,嘗試去使用gcc編譯c嘗試去使用gdb偵錯工具,嘗試去用命令列去幹更多的事情,你會發現php其實和linux才是絕配。

這個時候你已經可以熟練的去使用linux了,為什麼不嘗試自己去實現一個小小的架構,去分析一下常用架構中的技巧,php的物件導向,php的魔法函數,php如何?多態,以及php在apache中是怎麼啟動並執行,nginx為什麼比apache效能高,如何在多台伺服器下去共用session,如何利用curl去調用一些介面實現開發過程中的某些場合的使用,如何去使用serialize /unserialize去實現一些資料的序列化儲存反序列話使用,如何去抓取一些網站的內容,以及如何去改進一些使用習慣。總之,你需要做的還很多,php並不是沒有什麼可以學的,而是不應該一直停留在代碼階段,應該去學習更深入的東西,要相信當你感覺沒有什麼東西可以學習的時候有很大一部分是因為你的知識範圍還太小,認知層面還太淺。

編程不容易,且行且珍惜,找工作也不容易,所以不管任何時候還是要努力提高自己。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.