iOS程序猿如何快速掌握 PHP,化身"全棧攻城獅"?

這是一篇以 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.

相關文章
相關標籤/搜索