MAC PHP MARK

這是一篇以 iOS 開發人員的視角寫給廣大iOS 程序猿的 PHP 入門指南.在這篇文章裏我努力去發掘 objectiv-c 與 php 之間的共性,來幫助有必定 iOS 開發經驗的攻城獅來快速上手一門後臺開發語言.後臺開發語言,就是以"數據接口"的形式出如今咱們的開發文檔的那個東西!掌握PHP,不管對本身目前的iOS開發工做仍是之後我的職場生涯的長久發展,都會大有裨益!最重要的是,PHP自己不是一個玩具語言,而是目前至關一部分公司仍然在用的後臺開發語言,甚至包括你目前的公司;這篇文章,也不是一個簡單的基礎手冊,而是以一種更適合 iOS 開發人員理解的方式來系統講解 PHP 中最核心最重要最經常使用的概念和功能.閱讀並有效實踐本文,將有助於你擁有獨立編寫後臺數據接口的能力.php

必要的準備與說明

下載最新版XAMPP

首先,你須要下載最新版 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!

下面編寫最簡單的 Hello World 程序,請在如下步驟執行.設計模式

1.在 應用程序-->XAMPP-->htdocs 目錄下新建目錄 find_php.

沒有特別的意思,純碎是爲了演示方便,同時不干擾默認存在的php文件.數組

2.打開Atom編輯器,使用 cmd+N 新建文件,並輸入如下代碼,並 cmd+S 保存到 find_php目錄,文件命名爲 index.php.

<?php echo 'Hello World'; ?>

若是PHP沒法如中同樣高亮顯示,可能就須要點擊文件右下角,以手動指定當前問文件的語法高亮方式.
HelloWorld瀏覽器

3.在瀏覽器地址欄輸入: http://localhost/find_php/index.php,便可看到用PHP寫的Hello World.

hello World 顯示

AppDelegate 入口文件

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 設計模式

咱們仍然從經常使用的MVC模式來開始更進一步的討論.M,即Model數據模型,對應於咱們在地址欄輸入的model;V,即視圖View,更直接地說是顯示數據,爲了簡化討論,咱們此處僅對移動端開發經常使用的JSON格式數據的顯示做一實現;C,即Controller控制器,也就是咱們常說的視圖控制器,下面會具體討論如何在PHP中定義視圖控制器.

注意: 移動端數據接口只是PHP的應用場景之一.其實你平常接觸的絕對部分網站都是由 PHP 驅動的,要想寫出佈局優美的網站,你須要學習HTML和JS相關的知識.若是有興趣,建議去這個網站: http://www.w3school.com.cn

改進後的 index.php

<?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中便可,由於它暫時再也不須要作變動了.一些說明的技術點是:

  • 實現了 魔術方法 __autoload,以實現自動加載相關的類文件.這有些相似於咱們在 .pch中全局引入某個頭文件,而後整個工程到處可用同樣.
  • php 是一種弱類型語言,你定義變量時沒必要聲明類型,可是變量要以 美圓符號 $開頭.
  • php 使用 new 函數來建立一個對象,語法是 new 類名(),這不由讓我想起 oc 中的 new函數,它的語法是: [類名 new];
  • php 中的函數,看起來更像是C語言函數,也許說更像 oc 中的block,可能更好理解些.
  • php 訪問屬性,使用的是 ->,而不是 .;另外一種 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

由於你還沒有定義視圖控制器!

Controller:定義視圖控制器

在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語言,也有一些很是強大的特性,推薦閱讀:

Model: 關於數據模型的幾點說明.

  • 網上關於MVC中M的討論,此處我選取的是最基本的一種: M專指用於存儲某種數據的類的實例.它能夠用於數據的格式化存儲和傳遞,但不該包含發起網絡請求和讀寫數據庫等操做;
  • 在本文討論的Model中,咱們進一步簡化了Model,容許且只容許用於經過URL來定義某個控制器的Model;
  • PHP 是一本弱類型的語言,因此沒必要專門爲某種控制器指定某種類型的Model.
  • "PHP 中的數組其實是一個有序映射。映射是一種把 values 關聯到 keys 的類型。此類型在不少方面作了優化,所以能夠把它當成真正的數組,或列表(向量),散列表(是映射的一種實現),字典,集合,棧,隊列以及更多可能性。因爲數組元素的值也能夠是另外一個數組,樹形結構和多維數組也是容許的。"

View: 一個顯示HTML的實例.

返回 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,輸出應該是:

  • id:42
  • name:iOS122
  • 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.

相關文章
相關標籤/搜索