资讯专栏INFORMATION COLUMN

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

Chiclaim / 636人阅读

摘要:此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表向量,散列表是映射的一种实现,字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

这是一篇以 iOS 开发人员的视角写给广大iOS 程序猿的 PHP 入门指南.在这篇文章里我努力去发掘 objectiv-c 与 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.

如果PHP无法如中一样高亮显示,可能就需要点击文件右下角,以手动指定当前问文件的语法高亮方式.

3.在浏览器地址栏输入: http://localhost/find_php/index.php,即可看到用PHP写的Hello World.

AppDelegate 入口文件

iOS应用通常是以 AppDelegate 文件作为编码的起始(准确说的是 main.m,在此不细究).在PHP中,你可以使用一个 index.php 文件作为你的 php 程序的唯一入口.你的所有的php页面间的访问与跳转,都将是由此处开始.下面的代码可以先先复制到你的 index.php种,它实现了一个基本的页面访问与控制的框架:

";

echo "数据模型:
"; foreach ($model as $key => $value) { echo $key.":".$value."
"; } ?>

然后在浏览器地址栏,输入: 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
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 文件,并把下面的代码复制进去:

` 而不是 `.` */
    $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 = "
    "; foreach ($this->model as $key => $value) { $content .= "
  • $key:$value
  • "; } $content .= "
"; 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代码如下:




  • id:42
  • name:iOS122
  • age:25

此处使用了简单的HTML标签.

小结

本文通过模拟实现 iOS 的MVC的设计模式,来概要性地讲解了PHP中的对应的各个概念.熟悉以上操作,可以使你具备自定义服务器接口的基本能力.参与讨论,参见:http://www.ios122.com/tag/php/ 更全面地信息,参见PHP官方中文文档: http://ua2.php.net/manual/zh/langref.php.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21142.html

相关文章

  • iOS程序如何快速掌握 PHP,化身"全栈城狮"?

    摘要:此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表向量,散列表是映射的一种实现,字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。 这是一篇以 iOS 开发人员的视角写给广大iOS 程序猿的 PHP 入门指南.在这篇文章里我努力去发掘 objectiv-c 与 php 之间的共性,来帮助有一定 iOS 开发经验的攻城狮来快速...

    zollero 评论0 收藏0
  • 写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景

    摘要:前言本着实践为主的原则此系列文章不做过多的概念性的阐述和讨论更多的代码和篇幅用来展示和下的基础代码结构与具体实现来展示各自优劣这篇文章更多的在于发掘与的共性以期为那些对感兴趣的开发者找到一种平滑的过渡与重构代码的方式如果对感兴趣可以直接将本 前言 本着实践为主的原则,此系列文章不做过多的概念性的阐述和讨论;更多的代码和篇幅用来展示MVC和MVVC下的基础代码结构与具体实现,来展示各自优...

    tianren124 评论0 收藏0
  • 采用React+Ant Design组件化开发前端界面(一)

    摘要:基础知识使用脚手架创建项目并启动安装脚手架使用脚手架创建项目为项目名。否则可能导致项目发布上线后,报错无法执行。安装测试使用注意默认情况下安装的需要引入才会生效样式,但很多时候,我们只是使用了部分组件,引入整个样式文件,有些得不偿失。 showImg(http://upload-images.jianshu.io/upload_images/2774022-8d65190f1b972c...

    cppprimer 评论0 收藏0
  • 【Copy城狮日志】"Error: if there's nested dat

    摘要:工作日,每天起床机械地去上班,周末,每天优哉游哉,好像一个木偶,被生活蹂躏的木偶,意识以外的力量在操纵着的木偶。支持子节点数据异步加载。当然,官方将提供更改键值的。本许可协议授权之外的使用权限可以从处获得。 Created by huqi at 2019-5-18 10:32:30 Updated by huqi at 2019-5-18 12:32:23 showImg(http...

    褰辩话 评论0 收藏0
  • 云计算,加速程序城狮开发流程

    摘要:而令人关注的是,将云计算技术整合到业务的开发工作流程中可以显著提高生产力。模拟开发人员也可以检查其程序在不同平台上的运行方式,如果这是特定开发工作中的一个问题。通过采用云计算可提高生产力,开发人员将获得很多益处。如今,现代软件的开发在硬件和软件资源方面的要求是非常苛刻的,而很多程序人员只是为了编写代码而投购买高端机器的情况并不少见。实际上,这样的处理和投入是值得的,但更重要的是,这些人可能会...

    crelaber 评论0 收藏0

发表评论

0条评论

Chiclaim

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<