首頁  >  文章  >  後端開發  >  iOS程式猿如何快速掌握 PHP,化身"全端攻城獅"?

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

WBOY
WBOY原創
2016-07-23 08:54:45834瀏覽

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

必要的準備與說明

iOS程式猿如何快速掌握 PHP,化身

首先,你需要下載最新版 XAMPP軟體,以在本地搭建一個 php 伺服器.下載位址: https://www.apachefriends.org/download.html.

下載完成後,雙擊安裝.安裝成功後,選擇Mange Servers-->Start All啟動本機伺服器.啟動成功後,在瀏覽器中輸入http://localhost,就可以看到一個預設的PHP頁面.

你的php伺服器檔案預設放在: 應用程式-->XAMPP-->htdocs 目錄下.

然後你還需要下載一款PHP編輯器,此時我使用Github的Atom編輯器.個人感覺界面很舒適,代碼高亮看著也很舒服,你可以到這裡下載: https://atom .io.下載完成後,點選安裝即可.

最後要說明的是:PHP版本很多,下面的講解支持目前最常用的 php 5.3.0 及其以上版本.

Hello World!

下面編寫最簡單的 Hello World 程式,請在以下步驟執行.

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

沒有特別的意思,純碎是為了示範方便,同時不干擾預設存在的php檔案.

2.開啟Atom編輯器,使用cmd N 新建檔案,並輸入以下程式碼,並cmd S 儲存至find_php目錄,檔案命名為index.php.
  1. echo 'Hello World';
  2. ?>
複製代碼

如果PHP無法如中一樣高亮顯示,可能就需要點擊檔案右下角,以手動指定目前問文件的語法高亮方式.
iOS程式猿如何快速掌握 PHP,化身

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

iOS程式猿如何快速掌握 PHP,化身

AppDelegate 入口文件

iOS應用程式通常是以AppDelegate 檔案作為編碼的起始(準確地說的是main.m,在此不細究).在PHP中,你可以使用一個index.php 檔案作為你的php 程式的唯一入口.你的所有的php頁間的訪問與跳轉,都將是由此處開始.下面的程式碼可以先複製到你的index.php種,它實現了一個基本的頁面訪問與控制的框架:

  1. $controller = '';
  2. $model = array();
  3. if (isset($_GEGET[ 'viewController'])) {
  4. $controller = $_GET['viewController'];
  5. }
  6. if (isset($_GET['model'])) {
  7. $model = $_GET['model'];
  8. }
  9. echo '控制器:'.$controller.'
    ';
  10. echo '資料模型:
    ';
  11. foreach ($model as $key => $value) {
  12. echo $key.':'.$value.'
    ';
  13. }
  14. ?>
複製程式碼

然後在瀏覽器網址列,輸入: http://localhost/find_php/index.php?viewController=HomeViewController&model[id]= 42&model[name]=iOS122&model[age]=25
頁輸入:

  1. 控制器:HomeViewController
  2. 資料模型:
  3. 控制器:HomeViewController
  4. 資料模型:
id:42
id: >name:iOS122age: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
  1. /* 實作類別檔案的自動載入*/
  2. function __autoload($className) {
  3. if (file_exists($className . '.php')) {
  4. require_once $className . '.php';
  5. return true;
  6. }
  7. return false;
  8. }
  9. }
  10. return false;
  11. }
  12. }
  13. >
  14. // --------------------------------
  15. /* 取得使用者想要造訪的頁面的相關資訊. */
  16. $controllerName = '';
  17. $model = array();
  18. if (isset($_GET['viewController'])) {
  19. $controllerName = $_GET['viewController'];
  20. }
  21. if (isset($_GET['model'])) {
  22. $model = $_GET['model'];
  23. }
  24. /* 跳到指定頁面. */
  25. if ('' !== $controllerName) {
  26. /* 我們約定每個控制器都至少有一個$ model屬性與show方法*/
  27. $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 檔案,並把下面的程式碼複製進去:

  1. /* 建議一個檔案中只有一個與檔案同名的類別.
  2. 如果需要繼承自其他類別,可以使用關鍵字extends,如*/
  3. class HomeViewController
  4. {
  5. /*
  6. 定義屬性,允許定義時,給屬性一個預設值,這一點比OC靈活.
  7. public 關鍵字用於指定外部可存取;
  8. 類似的還有private(僅允許內部存取),protected(僅允許自身及其子類別存取);
  9. 屬性前必須有關鍵字public/private/protected 中的一個.
  10. */
  11. public $model = array(); // 定義允許外部存取的屬性.
  12. /* 建構子,相當於init初始化方法;
  13. 當呼叫New 函式新物件時,此方法會被自動呼叫;
  14. array 指明參數型別, $model是實參, $model = array(),用於指定預設參數;
  15. 指定了預設參數的參數,在呼叫時,可以不傳;
  16. public 關鍵字作用等同於屬性的關鍵字,預設可以不傳,不傳則為public;
  17. */
  18. public function __construct(array $model = array())
  19. {
  20. /* 在實例方法內部存取物件的屬性,使用$ this 關鍵字,且屬性名前沒有美元符號$;
  21. 類似於oc 中的self,但是使用的是`->` 而不是`.` */
  22. $this->model = $model;
  23. }
  24. /*
  25. 析構函數,作用和oc 中的dealloc很像.
  26. */
  27. public function __destruct()
  28. {
  29. $this-this >model = NULL;
  30. }
  31. /* 取得內容,用於輸出顯示. */
  32. protected function getContent()
  33. {
  34. /* 預設把使用者輸入以JSON格式回傳*/
  35. $content = json_encode($this->model);
  36. return $content;
  37. }
  38. /*
  39. 定義實例方法:show;
  40. 定義方法使用的是關鍵字function,且無法指定回傳值,這點不如oc 方便;
  41. */
  42. public function show()
  43. {
  44. /* 使用$this關鍵字來呼叫另一個實例方法. */
  45. $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 方法:
  1. /* 取得內容,用於輸出顯示. */
  2. protected function getContent()
  3. {
  4. $content = '
      ';
    • foreach ($this->model as $key => $value) {
    • $content .= "
    • $key:$value
    • " ;
    • }
    • $content .= '
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn