接口是模块化编程的基础,它是各模块之间的通信媒介。 什么叫接口?接口,inerface,类的内外部交互函数,也可以把它视作一个数据缓冲器。 为什么要做接口?便于数据的统一管理。一个最实用的例子就是输入数据的有效性检测。 下面看一段例程: ———— PHP代码 ————[color=#000000] [color=#0000bb]
[/color][color=#0000bb]x[/color][color=#007700]=[/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]y[/color][color=#007700]=[/color][color=#0000bb]0[/color][color=#007700]; } function [/color][color=#0000bb]show[/color][color=#007700]() { [/color][color=#0000bb]$z[/color][color=#007700]= [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]x [/color][color=#007700]+ [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]y[/color][color=#007700]; echo [/color][color=#0000bb]$z[/color][color=#007700]; } } [/color][color=#0000bb]$a [/color][color=#007700]= new [/color][color=#0000bb]a[/color][color=#007700]; [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]x [/color][color=#007700]=[/color][color=#0000bb]2[/color][color=#007700]; [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]y [/color][color=#007700]=[/color][color=#0000bb]3[/color][color=#007700]; [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]show[/color][color=#007700](); [/color][color=#0000bb]?> [/color] [/color] ———————————— 这是一个简单的加法类,它的类成员有: 属性:x y 操作数。 方法:show()显示结果。 在这段例程中,虽然我们得到了正确的结果,但数据的输入没有用到接口,而是直接附值给类的成员变量x y 。 再看一个实例化: ———— PHP代码 ————[color=#000000] [color=#0000bb]
[/color][color=#0000bb]x [/color][color=#007700]=[/color][color=#dd0000]"*dk"[/color][color=#007700]; [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]y [/color][color=#007700]=[/color][color=#dd0000]"rty"[/color][color=#007700]; [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]show[/color][color=#007700](); [/color][color=#0000bb]?> [/color] [/color] ———————————— 得到结果为0。 直接使用类成员变量,只能从外部控制输入数据的有效性,使类的封装性大打折扣。 在真正面向对象编程中,类成员变量是受保护的,不允许被外部程序使用。 一个真正的类应该把所有对象的属性和方法都包装起来,仅留下接口供外部使用。 改写上面的例程: ———— PHP代码 ————[color=#000000] [color=#0000bb]
[/color][color=#0000bb]x[/color][color=#007700]=[/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]y[/color][color=#007700]=[/color][color=#0000bb]0[/color][color=#007700]; } function [/color][color=#0000bb]validate[/color][color=#007700]()[/color][color=#ff8000]//检测有效性 [/color][color=#007700]{ if(![/color][color=#0000bb]preg_match[/color][color=#007700]([/color][color=#dd0000]"/^[d]+$/"[/color][color=#007700],[/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]x[/color][color=#007700])) { echo [/color][color=#dd0000]"x不是数字"[/color][color=#007700]; return [/color][color=#0000bb]false[/color][color=#007700]; } if(![/color][color=#0000bb]preg_match[/color][color=#007700]([/color][color=#dd0000]"/^[d]+$/"[/color][color=#007700],[/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]y[/color][color=#007700])) { echo [/color][color=#dd0000]"y不是数字"[/color][color=#007700]; return [/color][color=#0000bb]false[/color][color=#007700]; } return [/color][color=#0000bb]true[/color][color=#007700]; } function [/color][color=#0000bb]showAdd[/color][color=#007700]() [/color][color=#ff8000]//显示相加结果 [/color][color=#007700]{ [/color][color=#0000bb]$z[/color][color=#007700]= [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]x [/color][color=#007700]+ [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]y[/color][color=#007700]; echo [/color][color=#0000bb]$z[/color][color=#007700]; } function [/color][color=#0000bb]input[/color][color=#007700]([/color][color=#0000bb]$x[/color][color=#007700],[/color][color=#0000bb]$y[/color][color=#007700]) [/color][color=#ff8000]//输入接口 [/color][color=#007700]{ [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]x [/color][color=#007700]= [/color][color=#0000bb]$x[/color][color=#007700]; [/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]y [/color][color=#007700]= [/color][color=#0000bb]$y[/color][color=#007700]; if(![/color][color=#0000bb]$this[/color][color=#007700]->[/color][color=#0000bb]validate[/color][color=#007700]()) return [/color][color=#0000bb]false[/color][color=#007700]; return [/color][color=#0000bb]true[/color][color=#007700]; } } [/color][color=#0000bb]$a [/color][color=#007700]= new [/color][color=#0000bb]a[/color][color=#007700]; if([/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]input[/color][color=#007700]([/color][color=#dd0000]"aaa"[/color][color=#007700],[/color][color=#dd0000]"rty"[/color][color=#007700])) [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]showAdd[/color][color=#007700](); if([/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]input[/color][color=#007700]([/color][color=#0000bb]1[/color][color=#007700],[/color][color=#0000bb]4[/color][color=#007700])) [/color][color=#0000bb]$a [/color][color=#007700]-> [/color][color=#0000bb]showAdd[/color][color=#007700](); [/color][color=#0000bb]?> [/color] [/color] ———————————— 当检测到数据不合法时程序中止运行,以免得到不可意料的结果。 现在你可以给类增加一些方法:减法、剩法、除法。感受一下使用接口带来的好处:)
类的接口与代码模块化
最新推荐文章于 2022-12-08 18:14:36 发布