0Pricing
PHP Academy · درس

تطبيق الواجهات

عرّفوا العقود باستخدام interface وطبّقوها في فئات متعددة

تطبيق الواجهات درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

مقدمة: الواجهات في PHP

تعرّف الواجهة عقدًا: قائمة من تواقيع الدوال التي يجب على الأصناف المنفذة توفيرها. وبخلاف الأصناف المجرّدة، يمكن للصنف تنفيذ واجهات متعددة.

المفاهيم الأساسية

المفاهيم الأساسية:

  • يُصرَّح عنها باستخدام interface Name {}
  • لا تحتوي الدوال على جسم — بل على التواقيع فقط
  • تُنفَّذ باستخدام implements InterfaceName
  • يمكن للصنف تنفيذ واجهات متعددة

تعريف واجهة

مثال:

<?php
interface Serializable {
    public function serialize(): string;
    public function unserialize(string $data): void;
}

interface Loggable {
    public function toLog(): string;
}

// Implementing both interfaces:
class Event implements Serializable, Loggable {
    public function __construct(private string $type, private string $data) {}
    public function serialize(): string { return json_encode(['type'=>$this->type,'data'=>$this->data]); }
    public function unserialize(string $d): void { $a = json_decode($d,true); $this->type=$a['type']; $this->data=$a['data']; }
    public function toLog(): string { return "[{$this->type}] {$this->data}"; }
}

الواجهة كنوع

متابعة:

<?php
interface Cache {
    public function get(string $key): mixed;
    public function set(string $key, mixed $val, int $ttl = 0): void;
    public function delete(string $key): void;
}

// Function accepts any Cache implementation:
function loadUser(int $id, Cache $cache): array {
    $key = "user:$id";
    $user = $cache->get($key);
    if (!$user) {
        $user = fetchFromDb($id);
        $cache->set($key, $user, 3600);
    }
    return $user;
}

ثوابت الواجهة

مزيد من التعمق:

<?php
interface HttpMethods {
    const GET    = 'GET';
    const POST   = 'POST';
    const PUT    = 'PUT';
    const DELETE = 'DELETE';
}

class Router implements HttpMethods {
    public function addRoute(string $method, string $path, callable $handler): void {
        // ...
    }
}

$router = new Router();
$router->addRoute(HttpMethods::GET, '/users', fn() => []);

تمديد واجهة لواجهة أخرى

استخدام عملي:

<?php
interface Readable {
    public function read(): string;
}

interface Writable {
    public function write(string $data): void;
}

// Interface can extend multiple interfaces:
interface ReadWrite extends Readable, Writable {
    public function seek(int $position): void;
}

class FileStream implements ReadWrite {
    public function read(): string    { return ''; }
    public function write(string $d): void { }
    public function seek(int $p): void { }
}

حقن الاعتماديات باستخدام الواجهات

متقدم:

<?php
interface MailerInterface {
    public function send(string $to, string $subject, string $body): bool;
}

class SmtpMailer implements MailerInterface {
    public function send(string $to, string $subject, string $body): bool {
        // real SMTP send
        return true;
    }
}

class UserService {
    public function __construct(private MailerInterface $mailer) {}

    public function register(string $email): void {
        // save user...
        $this->mailer->send($email, 'Welcome!', 'Thanks for joining.');
    }
}

النمط

تُستخدم أنماط الواجهات الشائعة في PHP لحل مشكلات التصميم المتكررة بوضوح. طبّقوها باتساق للحفاظ على شيفرة سهلة القراءة والصيانة.

متى تُستخدم

إن معرفة متى تُطبَّق واجهات PHP لا تقل أهمية عن معرفة كيفية تطبيقها. فالإفراط في استخدامها يؤدي إلى التعقيد، بينما يؤدي عدم استخدامها بما يكفي إلى التكرار.

مثال من العالم الحقيقي

تظهر واجهات PHP في التطبيقات الواقعية بكثرة في أطر العمل وORMs وطبقات الخدمات. ويساعدكم فهمها على الإسهام في مشاريع PHP الاحترافية.

أخطاء شائعة

تجنبوا هذه الأخطاء عند استخدام واجهات PHP:

  • يمكن للأصناف تنفيذ واجهات متعددة، لكنها لا تمدد سوى صنف واحد
  • لا يمكن للواجهات أن تحتوي على خصائص أو أجسام دوال (باستثناء الافتراضي في PHP 8)
  • برمجوا وفق واجهة (نوع مجرد)، لا وفق تنفيذ
  • استخدموا الواجهات لتمكين حقن الاعتماديات والمحاكاة في الاختبارات

تحقق سريع

كم واجهة يمكن لصنف PHP تنفيذها في الوقت نفسه؟

مراجعة: الواجهات في PHP

الملخص:

  • يمكن للأصناف تنفيذ واجهات متعددة، لكنها لا تمدد سوى صنف واحد
  • لا يمكن للواجهات أن تحتوي على خصائص أو أجسام دوال (باستثناء الافتراضي في PHP 8)
  • برمجوا وفق واجهة (نوع مجرد)، لا وفق تنفيذ
  • استخدموا الواجهات لتمكين حقن الاعتماديات والمحاكاة في الاختبارات

الأسئلة الشائعة

هل درس «تطبيق الواجهات» مجاني؟

نعم — نص درس «تطبيق الواجهات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «تطبيق الواجهات»؟

عرّفوا العقود باستخدام interface وطبّقوها في فئات متعددة تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تطبيق الواجهات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. توسيع الفئات باستخدام الوراثة
  2. الفئات والأساليب المجرّدة
  3. تطبيق الواجهات
  4. Traits لإعادة استخدام التعليمات البرمجية
← العودة إلى PHP Academy