下面的例子定义了一个接口 User ,这个接口中有两个抽象方法,getName() 和 setName()。能看到接口的写法和类很相似。
1
<?
2
interfaceUser {
3
functiongetName();
4
functionsetName($_name);
5
}
6
?>
注意,在接口中只能有抽象方法。如果在接口中出现了非抽象方法,会报错如下:
Interface function User::setName() cannot contain body in ……….
1
<?
2
interfaceUser {
3
functiongetName();
4
functionsetName($_name){}
5
}
6
?>
程序运行如下:
1
Fatal error: Interface functionUser::setName() cannot contain body in E:\PHPProjects\test.php on line 4
在接口中的抽象方法只能是public的,默认也是public权限。
并且不能设置成 private 或者 protected 类型。
否则会报错如下:
Access type for interface method User::setName() must be omitted in —on line —
在接口中,访问类型必须忽略。
1
<?
2
interfaceUser {
3
publicfunctiongetName();
4
privatefunctionsetName($_name);
5
}
6
?>
程序运行如下:
1
Fatal error: Access type forinterfacemethod User::setName() must be omitted in E:\PHPProjects\test.php on line 4
protected访问权限也会有问题
1
<?
2
interfaceUser {
3
publicfunctiongetName();
4
protectedfunctionsetName($_name);
5
}
6
?>
程序运行如下:
1
Fatal error: Access type forinterfacemethod User::setName() must be omitted in E:\PHPProjects\test.php on line 4
即使abstract 和 final 修饰符不能修饰接口中的抽象方法。
1
<?
2
interfaceUser {
3
final functiongetName();
4
abstractfunctionsetName($_name);
5
}
6
?>
类名和接口名不能相同
<?php
interface lito{
public function get_name();
public function get_age();
}
class lito implements lito{
protected $name;
protected $age;
protected $weight;
protected $country;
function get_name(){
}
function get_age(){
}
}
会报错
( ! ) Fatal error: Cannot redeclare class lito in E:\wamp\www\oop\interface.php on line 9
Call Stack
# Time Memory Function Location
1 0.0000 242968 {main}( ) ..\interface.php:0