Reputation: 28899
I'd like to create an interface, IFoo
, that's basically a combination of a custom interface, IBar
, and a few native interfaces, ArrayAccess
, IteratorAggregate
, and Serializable
. PHP doesn't seem to allow interfaces that implement other interfaces, as I get the following error when I try:
PHP Parse error: syntax error, unexpected T_IMPLEMENTS, expecting '{' in X on line Y
I know that interfaces can extend other ones, but PHP doesn't allow multiple inheritance and I can't modify native interfaces, so now I'm stuck.
Do I have to duplicate the other interfaces within IFoo
, or is there a better way that allows me to reuse the native ones?
Upvotes: 77
Views: 51310
Reputation: 197795
You are looking for the extends
keyword:
Interface Foo extends Bar, ArrayAccess, IteratorAggregate, Serializable
{
...
}
See Object Interfaces and in specific Example #2 Extendable Interfaces ff.
Note: Just removed the I
prefix in the IFoo
, IBar
interface names.
For an additional perspective of a PHP developer I can recommend the reading of "Prefixes and Suffixes Do Not Belong in Interface Names" by David Grudl for Nette (Jun 2022).
Upvotes: 153
Reputation: 148
You need to use the extends
keyword to extend your interface and when you need to implement the interface in your class then you need to use the implements
keyword to implement it.
You can use implements
over multiple interfaces in you class. If you implement the interface then you need to define the body of all functions, like this...
interface FirstInterface
{
function firstInterfaceMethod1();
function firstInterfaceMethod2();
}
interface SecondInterface
{
function SecondInterfaceMethod1();
function SecondInterfaceMethod2();
}
interface PerantInterface extends FirstInterface, SecondInterface
{
function perantInterfaceMethod1();
function perantInterfaceMethod2();
}
class Home implements PerantInterface
{
function firstInterfaceMethod1()
{
echo "firstInterfaceMethod1 implement";
}
function firstInterfaceMethod2()
{
echo "firstInterfaceMethod2 implement";
}
function SecondInterfaceMethod1()
{
echo "SecondInterfaceMethod1 implement";
}
function SecondInterfaceMethod2()
{
echo "SecondInterfaceMethod2 implement";
}
function perantInterfaceMethod1()
{
echo "perantInterfaceMethod1 implement";
}
function perantInterfaceMethod2()
{
echo "perantInterfaceMethod2 implement";
}
}
$obj = new Home();
$obj->firstInterfaceMethod1();
and so on... call methods
Upvotes: 7