這是一篇以 iOS 開發人員的視角寫給廣大iOS 程序猿的 PHP 入門指南.在這篇文章裏我努力去發掘 objectiv-c 與 php 之間的共性,來幫助有必定 iOS 開發經驗的攻城獅來快速上手一門後臺開發語言.後臺開發語言,就是以"數據接口"的形式出如今咱們的開發文檔的那個東西!掌握PHP,不管對本身目前的iOS開發工做仍是之後我的職場生涯的長久發展,都會大有裨益!最重要的是,PHP自己不是一個玩具語言,而是目前至關一部分公司仍然在用的後臺開發語言,甚至包括你目前的公司;這篇文章,也不是一個簡單的基礎手冊,而是以一種更適合 iOS 開發人員理解的方式來系統講解 PHP 中最核心最重要最經常使用的概念和功能.閱讀並有效實踐本文,將有助於你擁有獨立編寫後臺數據接口的能力.php
首先,你須要下載最新版 XAMPP軟件,以在本地搭建一個 php 服務器.下載地址: https://www.apachefriends.org/download.html.html
下載完成後,雙擊安裝.安裝成功後,選擇 Mange Servers-->Start All啓動本地服務器.啓動成功後,在瀏覽器中輸入 http://localhost,就能夠看到一個默認的PHP頁面.ios
你的php服務器文件默認放在: 應用程序-->XAMPP-->htdocs 目錄下.數據庫
而後你還須要下載一款PHP編輯器,此時我使用Github的Atom編輯器.我的感受界面很溫馨,代碼高亮看着也很舒服,你能夠到這裏下載: https://atom.io.下載完成後,點擊安裝便可.apache
最後要說明的是:PHP版本不少,下面的講解支持目前最經常使用的 php 5.3.0 及其以上版本.json
下面編寫最簡單的 Hello World 程序,請在如下步驟執行.設計模式
沒有特別的意思,純碎是爲了演示方便,同時不干擾默認存在的php文件.數組
cmd+N
新建文件,並輸入如下代碼,並 cmd+S
保存到 find_php目錄,文件命名爲 index.php.<?php echo 'Hello World'; ?>
若是PHP沒法如中同樣高亮顯示,可能就須要點擊文件右下角,以手動指定當前問文件的語法高亮方式.
瀏覽器
iOS應用一般是以 AppDelegate 文件做爲編碼的起始(準確說的是 main.m,在此不細究).在PHP中,你可使用一個 index.php 文件做爲你的 php 程序的惟一入口.你的全部的php頁面間的訪問與跳轉,都將是由此處開始.下面的代碼能夠先先複製到你的 index.php種,它實現了一個基本的頁面訪問與控制的框架:服務器
<?php $controller = ''; $model = array(); if (isset($_GET['viewController'])) { $controller = $_GET['viewController']; } if (isset($_GET['model'])) { $model = $_GET['model']; } echo '控制器:'.$controller.'<br />'; echo '數據模型:<br />'; foreach ($model as $key => $value) { echo $key.':'.$value.'<br />'; } ?>
而後在瀏覽器地址欄,輸入: http://localhost/find_php/index.php?viewController=HomeViewController&model[id]=42&model[name]=iOS122&model[age]=25
頁面輸入:
控制器:HomeViewController 數據模型: id:42 name:iOS122 age:25
viewController=
後面跟的是你你的表示你的視圖控制器, model
是一個字典,用於存儲數據模型,支持輸入多個鍵值對.id
,name
,age
等都是自定義的鍵,用於表示你想要傳給新頁面的數據,若是沒有能夠不寫.
注意: 此處暫僅考慮簡單的GET請求,至於其餘變體可在熟悉PHP語法後,自行書寫.學習新語言的初期,努力尋找新東西與已經掌握的東西的共通之處,老是能夠事半功倍!
咱們仍然從經常使用的MVC模式來開始更進一步的討論.M,即Model數據模型,對應於咱們在地址欄輸入的model;V,即視圖View,更直接地說是顯示數據,爲了簡化討論,咱們此處僅對移動端開發經常使用的JSON格式數據的顯示做一實現;C,即Controller控制器,也就是咱們常說的視圖控制器,下面會具體討論如何在PHP中定義視圖控制器.
注意: 移動端數據接口只是PHP的應用場景之一.其實你平常接觸的絕對部分網站都是由 PHP 驅動的,要想寫出佈局優美的網站,你須要學習HTML和JS相關的知識.若是有興趣,建議去這個網站: http://www.w3school.com.cn
<?php // index.php /* 實現類文件的自動加載 */ function __autoload($className) { if (file_exists($className . '.php')) { require_once $className . '.php'; return true; } return false; } // -------------------------------- /* 獲取用戶想要訪問的頁面的相關信息. */ $controllerName = ''; $model = array(); if (isset($_GET['viewController'])) { $controllerName = $_GET['viewController']; } if (isset($_GET['model'])) { $model = $_GET['model']; } /* 跳轉到指定頁面. */ if ('' !== $controllerName) { /* 咱們約定每一個控制器都至少有一個$model屬性和 show方法 */ $controller = new $controllerName(); $controller->model = $model; $controller->show(); } ?>
這個方法能夠實現根據用戶輸入自動跳轉至對應的界面.你直接把代碼複製到index.php中便可,由於它暫時再也不須要作變動了.一些說明的技術點是:
new 類名()
,這不由讓我想起 oc 中的 new函數,它的語法是: [類名 new];->
,而不是 .
;另外一種 php 訪問屬性的方式是使用 obj['屬性名']
,如$controller['model'].此時你訪問 http://localhost/find_php/index.php?viewController=HomeViewController&model[id]=42&model[name]=iOS122&model[age]=25
,應該會報錯:
syntax error, unexpected '>' in /Applications/XAMPP/xamppfiles/htdocs/find_php/HomeViewController.php on line 38
由於你還沒有定義視圖控制器
在find_php文件夾新建 HomeViewController.php 文件,並把下面的代碼複製進去:
<?php // HomeViewController.php /* 建議一個文件中只有一個 與文件同名的類. 若是須要繼承自其餘類,可使用關鍵字 extends,如 */ class HomeViewController { /* 定義屬性,容許定義時,給屬性一個默認值,這一點比OC靈活. public 關鍵字用於指定外部可訪問; 相似的還有 private(僅容許內部訪問),protected(僅容許自身及其子類訪問); 屬性前必須有關鍵字 public/private/protected 中的一個. */ public $model = array(); // 定義容許外部訪問的屬性. /* 構造函數,至關於init初始化方法; 當調用New 函數新建對象時,此方法會被自動調用; array 指明參數類型, $model是實參, $model = array(),用於指定默認參數; 指定了默認參數的參數,在調用時,能夠不傳; public 關鍵字做用等同於屬性的關鍵字,默承認以不傳,不傳則爲public; */ public function __construct(array $model = array()) { /* 在實例方法內部訪問對象的屬性,使用 $this 關鍵字,且屬性名前沒有美圓符號$; 相似於 oc 中的self,可是使用的是 `->` 而不是 `.` */ $this->model = $model; } /* 析構函數,做用和 oc 中的dealloc很像. */ public function __destruct() { $this->model = NULL; } /* 獲取內容,用於輸出顯示. */ protected function getContent() { /* 默認把用戶輸入以JSON格式返回 */ $content = json_encode($this->model); return $content; } /* 定義實例方法:show; 定義方法使用的是關鍵字 function,且沒法指定返回值,這點不如 oc 方便; */ public function show() { /* 使用$this關鍵字來調用另外一個實例方法. */ $content = $this->getContent(); echo $content; } }
此時你訪問 http://localhost/find_php/index.php?viewController=HomeViewController&model[id]=42&model[name]=iOS122&model[age]=25
,輸出應該是:
{"id":"42","name":"iOS122","age":"25"}
說明,頁面的確跳轉到了 HomeViewController控制器,並有效輸出;並且輸出的是咱們移動端開發最常接觸的 json 格式的數據.
以上的代碼,充分展現了php做爲一門面向對象(OOP)語言最經常使用的幾個功能,如定義屬性,定義實例方法,在示例方法內訪問屬性與實例方法等.PHP做爲一門弱類型的OOP語言,也有一些很是強大的特性,推薦閱讀:
返回 JSON 格式的數據,已經達到了作移動端開發的須要,但此處仍然使用HTML語法來顯示數據,以便於更好地理解.用下面的代碼替換 HomeViewController.php 文件的 getContent 方法:
/* 獲取內容,用於輸出顯示. */ protected function getContent() { $content = '<html><body><ul>'; foreach ($this->model as $key => $value) { $content .= "<li>$key:$value</li>"; } $content .= '</ul></body></html>'; return $content; }
此時你訪問 http://localhost/find_php/index.php?viewController=HomeViewController&model[id]=42&model[name]=iOS122&model[age]=25
,輸出應該是:
瀏覽器中會被自動解析爲一個列表.對應的HTML代碼以下:
<html> <head></head> <body> <ul> <li>id:42</li> <li>name:iOS122</li> <li>age:25</li> </ul> </body></html>
此處使用了簡單的HTML標籤.
本文經過模擬實現 iOS 的MVC的設計模式,來概要性地講解了PHP中的對應的各個概念.熟悉以上操做,可使你具有自定義服務器接口的基本能力.參與討論,參見:http://www.ios122.com/tag/php/ 更全面地信息,參見PHP官方中文文檔: http://ua2.php.net/manual/zh/langref.php.