手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 免费部署 N8N 的 Zeabur 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

接口与抽象类【来自博客园】

什么是接口 (interface) ?

接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。
(1)接口是一个行为的规范、协议。其实就是类和类之间的一种协定,一种约束
(2)C#不支持多继承,但是他把这个功能交给接口来实现。
(3)类与类之间的系统资源调用方式不一样,导致他们之间的通信很困难,而接口可以屏蔽掉它们之间的差异,能使他们顺利通信。

什么是抽象类(abstract class)?

1. 抽 象类仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造函数。抽象类可以同时有抽象方法和具体方法。一个抽象类不会有实例,这些构造函 数不能被客户端调用来创建实例。一个抽象类的构造函数可以被其子类调用,从而使一个抽象类的所有子类都可以有一些共同的实现,而不同的子类可以在此基础上 有其自己的实现。

2.  抽象类的用途1)  具体类不是用来继承的。 Scott Meyers曾指出,只要有可能,不要丛具体类继承。2)  假设有2个具体类,类A和类B,类B是类A 的子类,那么一个最简单的修改方案是应当建立一个抽象类(或java接口)C,然后让类A和类B成为抽象类C的子类。3)  抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。4)  抽象类应当拥有尽可能少的数据。

 3.  基于抽象类的模式和原则1)  针对抽象编程,不要针对具体编程。2)  尽量使用合成(Composition),而不要使用继承来达到复用的目的。3)  使用摸板方法模式

4.  什么时候应当使用继承复用1)  子类是超类的一个特殊种类,而不是超类的一个角色,也就是要区分”is – a” 和“has-a”两种关系。2)  永远不会出现需要将子类换成另一个子类的情况。如果设计师不是很肯定一个类回不会在将来变成另一个类的子类的话,就不应当把这个类设计成这个超类的子类。 3)  子类具有扩展超类的责任,而不是具有置换掉(Override)或注销掉(Nullify)超类的责任。4)  只有在分类学上有意义时,才可以使用继承,不要丛工具类继承。

抽象方法是必须实现的方法。且只能在抽象类中。

接口与抽象类

一个类可以继承多个接口。。。
一个类只能继承一个抽象类。。。

抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。
动物类要有呼吸方法。怎么呼吸就是子类的事了。

现在有很多讨论和建议提倡用interface代替abstract类,两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一定区别的。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像JAVA王子所说的事件中的适配器就是一个很好的应用。
用一个简单的例子,比如说一个教师,我们把它作为一个抽象类,有自己的属性,比如说年龄,教育程度,教师编号等等,而教师也是分很多种类的,我们就可以继承教师类而扩展特有的种类属性,而普遍属性已经直接继承了下来。
而接口呢~还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把这些行为定义成无body的方 法,作为一个集合,它是一个interface。而教师张三李四的各自行为特点又有不同,那么他们就可以扩展自己的行为body。从这点意义上来说,interface偏重于行为
总之,在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。

原文:http://www.cnblogs.com/cyc09156/archive/2009/01/09/1372330.html

Tags: 接口, 抽象, interface, abstract

simplexml简单测试

simplexml函数是PHP5推出的一个新的类库,可以让你很方便的操作XML,对大多数人而言,最常用的应该是simplexml_load_file和simple_load_string两种了。

但是在使用中总会有一点问题,于是做了简单的一些测试。

建立了四个文件,两个GBK,两个UTF8,

两个GBK的文件内容分别如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="gbk" ?>  
  2. <test>  
  3.     <test1>this is a test中文</test1>  
  4. </test>  

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <test>  
  3.     <test1>this is a test中文</test1>  
  4. </test>  
正如你们想的那样,UTF8的文件也是这些内容。

然后开始使用 simplexml_load_file进行测试:

PHP代码
  1. <?php  
  2. $xmlFile = '1.txt';  
  3.   
  4. $xml = @simplexml_load_file( $xmlFile );  
  5. if ( $xml === false ){  
  6.     echo'failed' );  
  7. }else{  
  8.     echo '<pre>';  
  9.     print_r( $xml );  
  10.     echo '</pre>';  
  11. }  
  12.   
  13. ?>  
然后,你会发现什么?

1、如果xml的encoding与文件类型不符,立刻报错
2、simplexml可以处理gbk的XML,即文件内容和encoding都为gbk(ANSI格式)
3、不管文件内容是什么,处理完了,都是UTF8.

over,测试完毕


其实想这个测试还有另外一个原因,因为thinkPHP的模版引擎的自定义扩展是采用XML来实现的,以前很多朋友在扩展的时候都会报错,那时候,我们的提示是:请使用 UTF8格式创建XML,现在,我们又可以提示:随便你想怎么创建,只要您的文件格式和encoding一致就行。

 

Tags: simplexml, test, utf-8, gbk

五种常见的 PHP 设计模式

设计模式只是为 Java™ 架构师准备的 —— 至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非常有用?本文解释了这些问题。

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”)。所介绍的设计模式背后的核心概念非常简单。经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板。使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物。同样的概念也适用于软件。

设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。例如,您可以说您正在编写一个提供松散耦合的消息传递系统,也可以说你正在编写名称为观察者 的模式。

用较小的示例展示模式的价值是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。本文不展示大型应用程序,所以您 需要思索的是在您自己的大型应用程序中应用示例原理的方法 —— 而不是本文演示的代码本身。这不是说您不应该在小应用程序中使用模式。很多良好的应用程序都以小应用程序为起点,逐渐发展到大型应用程序,所以没有理由不 以此类扎实的编码实践为基础。

既然您已经了解了设计模式以及它们的有用之处,现在我们来看看 PHP V5 的五种常用模式。

 

出于版权问题,我不能继续往下贴。不过原文也很方便的可以被访问到。

原文:http://www.ibm.com/developerworks/opensource/library/os-php-designptrns/index.html
原文译文:http://www.ibm.com/developerworks/cn/opensource/os-php-designptrns/index.html

 

Tags: php, ibm, developer, works

Imagick DLL

这个DLL,是我以前写的另外一篇博客里介绍过的东西,在这篇博客里,有多个朋友回复需要此文件,也曾通过邮件发送过给某位网友,为了更方便的提供,现在将这个DLL上传。
使用方法很简单,在window下面直接拷到PHP所在目录的ext目录下
然后到php.ini里,在extenstion区块里加上extension=....dll(文件名太长,记不往)
尽量放到最后加载
如果有可能,请先加载mbstring,iconv等unicode支持库

如果运行 失败,尝试到命令行下运行 ,看看出错信息是什么。

附件: php_imagick_st-q8.rar (1.25 M, 下载次数:3872)

Tags: php, imagick, dll

理解PHP面向对象

Understanding the PHP Object Model
View SlideShare presentation or Upload your own. (tags: php oop)

这还是比较值得推荐的。。。(备注:加载的时候可能有点慢。如果发现加载失败,请重新刷新页面一次)

Tags: 幻灯片, php