【MVC in PHP】PHP特性急速回顾【下】

我们继续回顾PHP的高级特性,请接上篇博客。

PHP高级特性
1、PHP 准备工作
2、OO in PHP 基础
3、OO in PHP 高级
4、优秀的PHP MVC框架介绍 

****************************************

3、OO in PHP 高级

讨论一下OO的高级特性,主要内容为接口、抽象类。

#1 接口

简单的项目是不需要用到很多的设计模式的,所以很多人一直在写写写一直都不知道写的是啥东西。大型的项目我们不可能一个人去开发完成,而团队合作最重要的就是灵活等等分工。有一种程序员写了很多年代码以后就变成了软件架构师,这不是一般人能胜任的工作,一个优秀的架构师设计的软件框架足以称得上是艺术。我们作为初学者需要慢慢去领会软件架构的思想,接受一点关于架构和设计模式的知识对我们以后的开发会有很大的意义。现在我们要讨论的是在PHP中使用的最广泛的类接口编程技术。

接口,定义了需要实现的类成员,而在PHP中定义的必须是类方法而不能是成员属性。接口定义用关键字interface ,命名通常为I+接口名字 这样的方式,只需要给出相应的方法申明即可,并且必须是全局的,不能包含常量和静态的方法,不能包含构造函数。

interface IAnimal{
function eat();
function sleep();
function play($game);
}

就像这样子,你只需要将需要实现的方法写出来就OK了。
现在就要去实现定义好的接口了。一个类实现某一个接口需要用到关键字implements ,实现接口必须要实现该接口的所有的方法,否则会报错。

class Dog implements IAnimal {
private $name = "狗狗"
function eat(){
echo $this->name."吃饭";
}
function sleep(){
echo $this->name."睡觉";
}
function play($game){
echo $this->name."玩".$game;
}
}

这样Dog类将IAnimal接口的所有方法都做了处理,即实现了接口。这样就是一个类实现了一个接口。
要注意的是,接口之间是可以有继承关系的,用extends 关键字,类似子类父类那样,会有子接口和父接口,而一个类在实现接口时,一定要实现子接口和父接口所有的方法。
一个类可以实现多个接口,还是有implements关键字,接口和接口之间用,分开就行。继承多个接口的类必须要实现所有的方法才算继承成功。
如果懂得Java中的interface 应该是不难理解这些东西的。

#2抽象类和抽象方法
PHP中抽象类和抽象方法是主流MVC框架所采用的设计模式。类接口设计模式和抽象类设计模式最主要的区别就是接口只能提供方法列表,只定义抽象界面,而不能提供实际的功能,但是抽象类则可以在抽象的实体中实现一些功能上的东西,这样就比接口更加灵活了。抽象类不能实例化对象,但是继承了抽象类的子类可以调用抽象类中的成员变量,所以可以这么理解:抽象类=普通类+类接口,即 abstract = class + interface 。抽象类必须有一个未被实现的抽象方法,用abstract 指定,还要有普通的方法和成员变量。下面看代码实现:

abstract class Animal{
abstract function eat();
abstract function play($game);
public $name;
function sleep(){
echo $this->name."睡觉觉";
}
}

定义了一个抽象类,有两个抽象方法,一个普通方法,一个全局的成员变量。现在来继承这个抽象类。

class Dog extends Animal{
function __construct($name){
$this->name = name;
}
function eat(){
echo $this->name."吃饭";
}
function play($game){
echo $this->name."玩".$game;
}

}

这样,我们定义了一个Dog类继承了抽象类Animal ,并且实现了其未实现的抽象方法,现在来看怎么使用。一定注意抽象类是不能实例化对象的。

$dog = new Dog("狗狗");
$dog->eat();
$dog->play("PHP");
$dog->sleep();

这样使用就实现了抽象类。
总结一下,接口只能提供一些方法,要实现接口要用implements关键字,然后实现所有的方法;抽象类和普通类的最大区别是class前面加上abstract关键字,并且里面必须包含一个未被实现的方法,这方法用abstract关键字指定,用extends实现继承,在子类中要实现抽象方法,并且可以直接继承抽象类中本来的普通类成员变量。相同点就是都是对类的一种抽象,不能直接实例化对象。
完善的设计模式中,抽象类技术和类接口技术都是广泛被使用到的,我们必须要理解并且会设计。

4、优秀的PHP MVC框架介绍 

****************************************

终于可以到这里了。介绍当前最重要的几个MVC框架,你要做的是选择其中之一并学精通。掌握基本的MVC开发思想然后掌握一个框架,其实就OK了,但是我们需要了解很多很多的东西。

#1 豪门框架:Zend Framework 官网:http://www.framework.zend.com/
PHP最官方的框架,功能最多,PHP企业级项目开发的首选框架,重量级的开发工具。学习成本较高,学好了很赞。如果你用的IDE是ZS,那么ZS已经内置了ZendFramework ,谁叫人家本来就是一家子的呢……初学者如果感兴趣的话可以上手ZF。不过我没搞过。

#2 最具艺术性的框架:Laravel 中文官网: http://www.golaravel.com/
专门为WEB艺术家设计的框架,简洁,优雅,艺术范儿十足。上手快,文档全,功能强大,语法很有艺术性。如果你是Mac 用户那么绝对值得玩玩!框架是跨平台的,Windows下面部署有点儿小难,不过我相信你如果想弄得话一定能弄好的。Laravel是2013年全球最喜爱的PHP框架排行第一哦!你赶紧去下载啊!嘻嘻我玩过,很赞!

#3 小巧但功能强大的框架:CodeIgniter  中文官网:http://codeigniter.org.cn/
小巧,简洁,高效,零配置,文档完善,国内外广泛使用,恩恩对这就是CI框架。CodeIgniter最大的优点就是小巧,学习成本很低。最大的缺点就是小巧,你无法要求CI去做ZF那样的企业级项目以及Laravel那种的语法优雅但是部署运行比较麻烦的事儿。国内使用很广泛,我玩的第一个框架,还不错。初学者最好的选择。

#4 国人开发功能强大的框架:ThinkPHP 官网:http://www.thinkphp.cn/
说实话当我知道TP是国人开发的时候我真的惊呆了!我们竟然也可以拥有如此强大的框架,真的很赞!!!支持国产,那么就用TP!并且因为是国产的,文档视频社区学习资料等等都是很熟悉的可能你稍微不注意就得到了TP作者的指点呢!本系列接下来的MVC实战会以TP来做。虽然我一直没有仔细学过ThinkPHP,,估计这个系列的博客写完我就会用了呢!嘻嘻!

#5 其他有名的但是没有用过的框架:http://www.oschina.net/news/47752/top-10-php-frameworks-for-2014 这篇文章可以看看
http://www.csdn.net/article/2014-01-03/2818006-PHP-framework-Laravel 还有这一篇

总之,MVC框架熟悉一个以后会很容易掌握其他的。每一种都有自己的特点,我们要多了解然后用好一两个就OK!

****************************************
这个系列主要以学习笔记呈现,讨论的内容主要以《PHP MVC开发实战》和《PHP设计模式》这两本书为主。
欢迎持续关注!

刘凯宁@C2P
20141005

Share

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>