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