在PHP中,我们同样使用interface关键字定义接口类型,如下面的代码。
interface IWork
{
function workA();
function workB();
}
定义接口时,我们习惯使用大写字母I开头,这种命名方式可以很清楚地说明这是一个接口类型。
在IWork接口中,我们定义了两个方法,即workA()和workB()方法,我们可以看到接口中的方法有两个重要的特点:
- 不需要可访问性关键字,它们都是公共的(public)。
- 没有方法体,这和抽象方法的定义是一样的。
此外,在接口中可以定义静态方法和非静态方法。
在PHP的接口中,我们不能定义变量,也就是不能直接定义属性了;不过,同样有两种方法可以实现在接口中定义属性的读写操作:
- 定义getter和setter方法,如getAge()方法和setAge()方法。
- 定义get()和set()方法,在接口中,我们同样可使用与类相关的魔术方法。
如下面的代码,我们分别使用这两种方法来实现接口中属性的读写方法定义:
interface IWork
{
function getAge();
function setAge();
function __get();
function __set();
}
不过,在实际应用过程中,使用getter和setter方法可以明确属性的名称,这样属性的功能更清晰,更符合创建接口的目的,即指定标准;而使用get()和set()方法定义接口的属性,灵活是灵活,只是和没有标准也没什么区别了。此外,在接口中同样可以使用call()方法用于自动调用方法,但这与使用get()和__set()方法一样,存在与制定标准精神不符的问题。所以,实际应用中,还是应该根据需要进行取舍。
关于PHP接口,还有一点需要注意,在接口中可以使用const关键字定义常量,而且这些常量可以直接通过接口类型访问,如下面的代码。
interface IWork
{
const name = 'IWork';
}
echo IWork::name; // 显示 IWork
此外,在PHP的接口还可以定义静态方法,如:
interface IWork
{
static function work();
}