0Pricing
PHP Academy · درس

Traits لإعادة استخدام التعليمات البرمجية

أدرجوا كتلًا برمجية قابلة لإعادة الاستخدام داخل الفئات باستخدام trait

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

مقدمة: السمات في PHP

السمة هي وحدة شيفرة قابلة لإعادة الاستخدام يمكن دمجها في أي صنف. وهي تحل مشكلة إعادة استخدام الشيفرة أفقيًا في اللغات ذات الوراثة الأحادية. استخدموا السمات عندما تحتاج أصناف متعددة غير مرتبطة إلى السلوك نفسه.

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

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

  • يُصرَّح عنها باستخدام trait Name {}
  • ادمجوها باستخدام use TraitName; داخل الصنف
  • يمكن أن تحتوي السمات على خصائص ودوال
  • يُحل التعارض باستخدام insteadof وas

السمة الأساسية

مثال:

<?php
trait Timestamps {
    private ?string $createdAt = null;
    private ?string $updatedAt = null;

    public function setCreatedAt(): void { $this->createdAt = date('c'); }
    public function setUpdatedAt(): void { $this->updatedAt = date('c'); }
    public function getCreatedAt(): ?string { return $this->createdAt; }
}

class Post {
    use Timestamps;
    public function __construct(public string $title) {
        $this->setCreatedAt();
    }
}

$p = new Post('Hello');
echo $p->getCreatedAt();

سمات متعددة

متابعة:

<?php
trait SoftDelete {
    private ?string $deletedAt = null;
    public function delete(): void { $this->deletedAt = date('c'); }
    public function isDeleted(): bool { return $this->deletedAt !== null; }
    public function restore(): void { $this->deletedAt = null; }
}

trait HasSlug {
    private string $slug = '';
    public function setSlug(string $title): void {
        $this->slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $title));
    }
}

class Article {
    use Timestamps, SoftDelete, HasSlug;
}

حل تعارض السمات

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

<?php
trait A {
    public function hello(): string { return 'Hello from A'; }
}

trait B {
    public function hello(): string { return 'Hello from B'; }
}

class C {
    use A, B {
        A::hello insteadof B;   // prefer A::hello
        B::hello as helloB;     // alias B::hello
    }
}

$c = new C();
echo $c->hello();   // Hello from A
echo $c->helloB();  // Hello from B

سمة مع دالة مجرّدة

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

<?php
trait Validatable {
    abstract protected function rules(): array;

    public function validate(array $data): array {
        $errors = [];
        foreach ($this->rules() as $field => $rule) {
            if ($rule === 'required' && empty($data[$field])) {
                $errors[$field] = "$field is required";
            }
        }
        return $errors;
    }
}

class RegistrationForm {
    use Validatable;
    protected function rules(): array {
        return ['email' => 'required', 'password' => 'required'];
    }
}

السمة مقابل الواجهة مقابل الصنف المجرّد

متقدم:

<?php
// Interface: contract (what a class CAN do)
// Abstract Class: partial template (what a class IS)
// Trait: code mixin (horizontal reuse — what a class DOES)

// Typical pattern: use all three together:
interface Cacheable {
    public function getCacheKey(): string;
}

trait CacheableTrait {
    public function cache(CacheInterface $cache): void {
        $cache->set($this->getCacheKey(), $this);
    }
}

النمط

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

متى تُستخدم

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

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

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

الأخطاء الشائعة

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

  • تحل Traits مشكلة الماسة في اللغات التي تدعم الوراثة الأحادية
  • استخدم insteadof وas لحل تعارضات أساليب Traits
  • تجبر Traits التي تحتوي على أساليب مجردة الصنفَ المستخدم لها على تنفيذ هذه الأساليب
  • فضّل التركيب (Traits وinterfaces) على تسلسلات الوراثة العميقة

اختبار سريع

ما بنية PHP التي تحل مشكلة إعادة استخدام الشيفرة أفقيًا عند الحاجة إلى السلوك نفسه في عدة أصناف غير مرتبطة؟

مراجعة: PHP Traits

الملخص:

  • تحل Traits مشكلة الماسة في اللغات التي تدعم الوراثة الأحادية
  • استخدم insteadof وas لحل تعارضات أساليب Traits
  • تجبر Traits التي تحتوي على أساليب مجردة الصنفَ المستخدم لها على تنفيذ هذه الأساليب
  • فضّل التركيب (Traits وinterfaces) على تسلسلات الوراثة العميقة

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

هل درس «Traits لإعادة استخدام التعليمات البرمجية» مجاني؟

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

ماذا ستتعلم في «Traits لإعادة استخدام التعليمات البرمجية»؟

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

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

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

كم من الوقت يستغرق درس «Traits لإعادة استخدام التعليمات البرمجية»؟

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

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

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

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

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