from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search


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

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.




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 the ferreteria\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.