接口是模块化编程的基础,它是各模块之间的通信媒介。
什么叫接口?接口,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]
————————————
当检测到数据不合法时程序中止运行,以免得到不可意料的结果。
现在你可以给类增加一些方法:减法、剩法、除法。感受一下使用接口带来的好处:)

被折叠的 条评论
为什么被折叠?



