Difference between revisions of "PHP/interface"
(→About) |
m (→About) |
||
Line 2: | Line 2: | ||
In [[PHP]], an '''interface''' is a set of public method-functions which can be required in either of two circumstances: | In [[PHP]], an '''interface''' is a set of public method-functions which can be required in either of two circumstances: | ||
* "'''implements'''" in the declaration of a class | * "'''implements'''" in the declaration of a class | ||
− | ** This works almost identically to ( | + | ** This works almost identically to (the alternative of) declaring the interface's functions as abstract functions in a trait or parent class. |
* '''as a type''' for a function argument or return value | * '''as a type''' for a function argument or return value | ||
** Advantages over using a class as a type: | ** Advantages over using a class as a type: |
Revision as of 12:36, 19 May 2024
About
In PHP, an interface is a set of public method-functions which can be required in either of two circumstances:
- "implements" in the declaration of a class
- This works almost identically to (the alternative of) declaring the interface's functions as abstract functions in a trait or parent class.
- as a type for a function argument or return value
- Advantages over using a class as a type:
- narrows down (more closely specifies) the function's expectations of a passed or returned object
- does not tie the object to a specific class/implementation hierarchy
- Advantages over using a class as a type:
This last point is one of the primary ways in which interfaces are useful: you may have a set of otherwise-unrelated classes with a set of descendants who need to do a set of things that were not part of their parent classes, and other parts of the code need to be able to recognize them as having this functionality. Having those descendants implement a common interface allows other code to require passed arguments to implement that interface, regardless of class-parentage.
Predefined
- instanceof works with both classes and interfaces
- interface_exists() returns TRUE if the interface has been declared in code that has executed.
Links
- official: interfaces
- 2018-01-13 PHP Interfaces Explained
Notes
I thought I had derived this rule, but then when I went to test it without the backslash again, it was working fine:
If an interface is declared within a namespace but used outside of that namespace in am "implements" clause, the full namespace path must be prefixed with a backslash or it won't match:
class fcrUserAcct_admin extends fcrUserAcct implements fiLinkableRecord, \ferreteria\data\ifEditableRecord, fiEventAware {...where
ifEditableRecord
is being declared inside theferreteria\data
namespace.For all other uses, the backslash is optional or forbidden.
Perhaps there was some kind of code-caching error? If it happens again, try the backslash.