ინტერფეისი საშუალებას გვაძლევს რომ განვსაზღვროთ თუ რა მეთოდები უნდა დააიმპლემენტიროს (განუსაზღვროს ლოგიკა) კლასმა რომელიც მას დააექსთენდებს. ის აბსტრაქტული კლასისგან განსხვავდება იმით, რომ მას არ შეუძლია გააჩნდეს საკუთარი თვისებები ან მეთოდები რომელიც საერთო იმ კლასებისათვის რომლებიც "განავცრობენ" ამ ინტერფეისს.
ინტერფეისის სინტაქსი კლასისაგან ორი ძირითადი ნიშნით განსხვავდება. პირველი არის ის, რომ ვიყენებთ interface ქივორდს, ხოლო მეორე ის რომ ყველა მეთოდი უნდა იყოს public.
<?php
interface StorageService
{
public function store($data); // ლოგიკა არ არის განსაზღვრული
public function fetch(); // ყველა მეთოდი public-ია
}
// მონაცემთა ბაზის კლასი
class DatabaseService implements StorageService
{
public function store($data)
{
// მაგალითის სიმარტივისთვის წარმოვიდგინოთ რომ აქ წერია განხორციელების გზა
// store data in database Code
}
public function fetch()
{
// fetch data from database Code
}
}
// რედისის კლასი ქეშირებისთის
class RedisService implements StorageService
{
public function store($data)
{
// Cache data Code
}
public function fetch()
{
// fetch Cached data Code
}
}
// [!] ეს კლასი ედიტორის დონეზეც კი ერორს აჩვენებს ვინაიდან
// [!] ის არ ახორციელებს store და fetch მეთოდების იმპლემენტაციას
// ფაილების სახით შემნახავი კლასი
class FilesService implements StorageService
{
// [!] Error
public function writeInFile($data) // ვინაიდან მეთოდის სახელი არ არის store ერორია
{
// write data into some file
}
public function ReadFromFile()// ვინაიდან მეთოდის სახელი არ არის fetch ერორია/
{
// fetch data from file
}
}