php实现多个接口的时候,如果这些接口里面有重名的函数会怎样

案例一

interface a
{
	function test();
}

interface b
{
	function test();
}

class C implements a,b {
	function test() {
		echo 'c';
	}
}

//不能说是实现哪个接口的,因为是两个同时实现,为C中的test()既是a中的test()也是b中的f()。

案例二

interface a
{
	function test($a,$b);
}

interface b
{
	function test();
}
class C implements a,b {
	function test() {
		echo 'c';
	}
}
//Fatal error: Declaration of C::test() must be compatible with a::test($a, $b)
这可以看出,并不会用b接口的覆盖(重写)a的.

总结:
如果接口有重名函数,则要参数个数和声明类型都一样,不然会致命错误

类比java的来理解就更加清晰了,
在java的接口中,要返回值,抛出的异常相同或者是子集,函数参数个数和类型声明都要一样,才可以,这和java的重写规则类似的
在java中分重写和重载机制.
在php中只有重写机制,没有重载(虽然有间接实现重载的,但是那不是真的重载)

你可能感兴趣的:(php)