讨论PHP的interface有什么用?
时间:2010-07-22
来源:互联网
我知道在强类型的语言中,interface可以实现多态的特性,但PHP本身是个弱类型语言,那interface这个关键字有什么用?
比如在Java里的代码:
复制代码
Java里通过接口统一了不同类的调用方式,但PHP完全可以不用 interface 来实现同样的功能:
class Boy {
function sayHello($name) {
echo "I'm a boy. Hello $name!\n";
}
}
class Girl {
function sayHello($name) {
echo "I'm a girl. Hello $name!\n";
}
}
function say($p) {
$p->sayHello("Woody");
}
$boy = new Boy();
$girl = new Girl();
say($boy);
say($girl);
如此看来,interface这个关键字就是多余了?
比如在Java里的代码:
- // 接口定义
- public interface sayHello {
- void sayHello(String name);
- }
-
- // 两个实现sayHello接口的类
- public class Boy implements sayHello {
- public void sayHello(String name) {
- System.out.println("I'm a boy. Hello " + name + ".");
- }
- }
-
- class Girl implements sayHello {
- public void sayHello(String name) {
- System.out.println("I'm a girl. Hello " + name + ".");
- }
- }
-
- // 主程序
- public class Main {
- public static void main(String[] args) {
- Boy boy = new Boy();
- Girl girl = new Girl();
- say(boy);
- say(girl);
- }
- public static void say(sayHello p) {
- p.sayHello("Woody");
- }
- }
Java里通过接口统一了不同类的调用方式,但PHP完全可以不用 interface 来实现同样的功能:
class Boy {
function sayHello($name) {
echo "I'm a boy. Hello $name!\n";
}
}
class Girl {
function sayHello($name) {
echo "I'm a girl. Hello $name!\n";
}
}
function say($p) {
$p->sayHello("Woody");
}
$boy = new Boy();
$girl = new Girl();
say($boy);
say($girl);
如此看来,interface这个关键字就是多余了?
作者: ggggqqqqihc 发布时间: 2010-07-22
其实对于弱类型的动态语言来说interface没有太大作用,动态语言依赖duck typing就能很好地面对接口编程了。
如果硬要说作用的话:
1、起到规范代码的作用。比如某模块需要依赖一个接口,对于动态语言,直接传递对象也是可以的,但是有时候开发者会在实现这个类时忘记实现某个必需的方法,所以模块在调用这个对象方法时为了避免运行时错误,需要用method_exists进行检查,那么这时就可以要求传递的类必须是指定interface的实现,只要用instanceof检查通过,就可以放心地调用这个对象的方法了。
2、RTTI运行时对象类型识别。有时程序需要根据传递的对象类型来进行进一步的处理,一般的做法是get_class、instanceof等判断对象类名或继承关系来进行对象类型识别,但有时候某个对象可能会“身兼数职”,拥有多个身份,那么这时候就可以用interface了,因为interface是可以多重继承的,此时接口的作用仅仅是给对象打上标记而已。
作者: 四不象 发布时间: 2010-07-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28