學習和使用PHP也有很多年頭了,而本身也在學習和使用其餘許多語言。我想經過這個總結來給本身一個交代。另外一方面也分享一下開發經驗,如何用PHP開發和管理大型的項目。php
許多人說本身1天學會PHP,頭3天就寫了個網站。的確PHP是個上手簡單的語言,緣由在於:java
PHP最初的目的是爲了作一個我的網站,很是快,很是簡單。因此到了今天,PHP仍是包含了大量的早期爲了簡單起見保留的語法。好比,你不須要定義任何函數就能執行PHP,這一點和shell,perl是同樣的;PHP在設計時沒少參考服務器的腳本語言。node
PHP的簡單也招來不少歧視,這些歧視不是沒有道理,可是我想說的是,還好他們沒有在寫PHP了。一個項目是否嚴謹且符合工程標準,須要開發團隊極強的自我約束能力,不然就算是用嚴謹而簡潔著稱Python,也能寫出很爛的項目代碼。linux
PHP發展至今,已經包含了命名空間,類,方法,函數,反射,異常處理,協程,異步IO等等複雜的實現;這使得PHP可以像好比JAVA同樣應對大型web項目。而PHP 7編譯完成的腳本執行速度已經快要達到HHVM的速度了。nginx
公平的說,PHP還有不少短板(2017年1月10日),好比多線程和異步編程依舊很不成熟。缺少權威的包管理體系,以致於社區貢獻的公共庫很少,好比和java比是少的多,爲了兼顧性能,許多擴展包都是用C語言寫的,使得擴展的開發成本不低,安裝也複雜。那一樣是腳本語言的Python,怎麼沒有幹掉PHP呢?一個是歷史緣由,不少項目已是PHP了。一個是Python在從2.* 跨域到 3.*的尷尬狀況。雖然Python已經有超越PHP的佔有率,可是國內Web開發領域,用Python的貌似很少。包括我本身用Python仍是在服務器管理、數據統計等方面,少有用於網站開發。我的感受Python開發網站仍是不如PHP來得方便。web
這份總結也能夠當作一份教程使用。可是起碼須要C語言的程序基礎,由於不會包含如何使用條件語句或者循環體這樣的東西。大概是下面3個內容。shell
這裏假設你有過任意一種編程語言的經驗了。macos
若是你對Linux 或 Unix(MacOS好比)熟悉,那麼恭喜你,運行PHP的方法和shell腳本徹底相同:
首先你建立一個文本文件,裏面隨便寫個字符串,好比"Hello world",注意,隨便寫就是其字面意思,不要關心語法什麼的。就像用記事本寫個文本文件那樣。編程
而後vim
$ php index.php
或者在腳本頂部加上 #!/usr/bin/env php ,而後
$ chmod +x index.php $ ./index.php
就能夠看到輸出了Hello world。
那麼問題來了,windows下如何運行PHP,linux 或 MacOS下,PHP從哪來?總得安裝吧。
Windows 下PHP安裝就是一個複製粘貼的過程,在php.net的官網上找到Windows的版本,下載,解壓以後,獲得的目錄中的 bin/php.exe 就是php了。在cmd命令行下執行
/path/to/php/bin/php.exe index.php
能夠運行剛纔的腳本。
redhat 或 Centos下用yum install php 可能遇到php版本不是最新的問題。因此這裏強烈建議用源碼安裝最新穩定版本。
若是你正在使用MacOS,PHP默認是有安裝的,版本通常還湊合,特別是有常常升級系統,應該仍是挺新的,若是要安裝其餘版本,那麼可使用brew install來安裝PHP。brew 工具可本身Google一下。
MacOS的gcc編譯器是XCode提供的,因此編譯以前,你得先安裝XCode。其餘linux環境只要不是太舊,應該沒有問題。能夠在官網查看編譯要求。
# 在MacOS下面你可能遇到大量的頭文件不存在的問題。安裝完xcode後,還須要執行下面指令,即便這樣,還可能繼續遇到/usr下權限問題。。。請多多google xcode-select --install
而後到官網下載穩定版本的php安裝包,好比如今是PHP 5.6.* 或者 PHP 7。你可能好奇PHP 6呢,流產了,聽說是社區貢獻的代碼質量問題和管理問題致使。
下載好的代碼包安裝過程和其餘Linux下源碼安裝方式同樣:
# 解壓並安裝 tar zxf php.*.tar.gz cd php.* ./configure make && make install
新版MacOS可能遇到/usr/include文件夾不存在,可Google解決。不過你能夠考慮使用系統自帶的PHP。
如何驗證安裝?執行指令 php -v 可看到php的版本信息。若是有,就是安裝成了。
早期咱們學習PHP的同窗都喜歡文本編輯器,好比nodepad++,vim。。。不過如今有更好的選擇。喜歡本身搗騰的仍是能夠選擇VIM或者Sublime也不錯。若是要一個完整的、現成的IDE,最好的是PHPStorm,可是這個要錢,不過盜版橫行。。。若是用其餘IDE,我以爲還不如用Sublime,順便還多學個Python,並且不強制收費。
待補充
剛纔說在文本文件index.php中隨便寫一個字符串,不要考慮語法,就這一點來,PHP比shell上手都簡單,由於在shell中這麼幹,得報錯(Hello: command not found)。我能夠這麼作緣由是,若是要執行一段PHP代碼,須要用<?php [代碼內容] ?> 將代碼包裹起來,好比下面這樣:
<?php //PHP每一個完整表達式,函數調用,都應該以;結尾,可是表達式,或者函數調用中間能夠換行 echo "Hello world"; ?>
而其餘部分,PHP會跳過直接輸出。若是你熟悉JSP 或者 ASP,這是同樣的,在JSP中你能夠用<% [java 代碼] %>。而上面的代碼還有一種更加簡潔的書寫方式:
這是一種輸出內容的時候的一種簡寫方式,省略了echo 語法和 php 關鍵字,還有一個分號也不寫了。 <?="Hello world"?>
這裏你可能好奇,php沒有函數嗎?通常語言執行的不該該起碼是個函數嗎?好比C語言的print("Hello World")?echo確實不是函數,是一個語法,就像C語言中聲明一個變量:
//這裏也沒有括號,int也不是函數 int age;
因此echo不具有做爲函數的一些特質,可是多了一些語法的功能,好比輸出多個值能夠
<?php echo "hello","world"; //若是一個php文件所有是php代碼,結尾的?>不要寫,目前先記着就行,爲啥不寫能夠Google一下。
任何一個PHP變量都是以$開頭,這個沒有例外,變量名包含字母數字下劃線和「unicode字符(這個玩玩就好,不要用它)」,和C同樣,不能數字開頭,區分大小寫。
<?php //php定義變量不須要事先聲明 $name = "kevin";//字符串 $age = 30;//整數 $name = $age;//弱類型使得你能夠這樣賦值,可是就像開頭說的,你要這麼作,PHP不會拒絕,可是你的代碼就容易出問題,並且不嚴謹了 $句子 = $name . " is a man.";//php支持unicode,不過也別這麼幹,英文命名是最好的選擇,拼音都不要用。 echo $句子; //獲得輸出:30 is a man. //這裏你能夠看到 英文句號 能夠鏈接2個字符串,可是這樣也致使了對象不能用.操做了,這也是個歷史遺留問題,PHP一開始壓根就沒考慮過會有對象這回事。
<?php /** * 直接來例子最容易理解 */ function add($a,$b = 1) { return $a + $b; } echo add(1,2); //獲得輸出:3
上面定義了一個函數add,用於兩個數相加,第二個數默認是1,這樣若是add($a) 就至關於 $a + 1或者$a++;的功能。PHP函數沒有定義返回值,並且要求function開頭,由於PHP是弱類型的,返回值是什麼類型,它並不關心。調用的人去理解就好了。自從有了面向對象後,函數就再也不提倡使用了,因此函數應該多用於及其簡單的場景,或者練習中。
class Math { function add($a,$b = 1) { return $a + $b; } } $m = new Math(); echo $m->add(1,2); //獲得輸出3
上面定義了一個Math類,包含一個add的公有方法,php的類和java同樣,有抽象類,接口,私有方法,保護方法等等,可是先不介紹了(省得1天學不完)。
這裏看到,用new 關鍵字實例化了類,這個各類語言基本同樣。用了->符號來調用對象的方法,這問題前面說了,由於句號被佔用了,C語言中指向結構體的指針也是用->這個符號來引用成員數據,PHP使用它也算是可以接受。
若是你想用PHP寫點東西,只須要再有一個函數手冊就行了。可是你還有不少疑問,好比怎麼把東西遞交給用戶的瀏覽器?
PHP最大的用處就是作網站,在終端裏面加加減減,輸出點東西,每每是練習或者單元測試,關於PHP單元測試,後面也會介紹。
PHP 最多見的使用組合是和Apache一塊兒,若是你在用MacOS,只要啓用我的站點的功能,就是一個完美的PHP + APACHE的服務器環境了。而其餘使用Linux和windows的人可能就要麻煩一些,要本身編譯和配置。爲了簡單起見,這裏用php-fpm的方式來運行php,而須要的web服務器是:Nginx。
待續