Traits in PHP

 


Traits in PHP


قائمة المصطلحات والتعريفات: 

المصطلح باللغة العربية

المصطلح باللغة الإنجليزية

التعريف

سمة

Trait

تسمح بإعادة استخدام الكود عبر فئات متعددة دون الحاجة إلى وراثة تقليدية

وراثة متعددة

Multiple Inheritance

ميزة تتيح للفئة أن ترث من أكثر من فئة واحدة.

تعارض الأسماء

Name Conflict

مشكلة تحدث عندما تحتوي سمات أو فئات متعددة على نفس الأسماء للطرق أو الخصائص.



المقدمة:

في البرمجة الكائنية في PHP، تعد السمات أداة قوية لتحسين إعادة استخدام الكود وتقليل التكرار. تساعد أيضا على مشاركة الدالة والخصائص بين الفئات المختلفة دون الحاجة إلى الوراثة المتعددة

تهدف هذه الوثيقة إلى شرح مفهوم السمات (Traits) في لغة  PHP، وتوضيح كيفية استخدامها لتحسين تصميم التطبيقات البرمجية وجعلها أكثر تنظيما وقابلة لإعادة الاستخدام.


ما هي السمات (Traits)؟

تسمح لنا بإضافة طرق وخصائص إلى الفئات بدون استخدام الوراثة. يمكن استخدام السمات لتعريف طرق يتم مشاركتها عبر فئات متعددة، مما يساعدنا في تقليل تكرار الكود.


كيفية استخدام السمات في PHP

يتم تعريف السمة باستخدام الكلمة المحجوزة trait. الفئة التي ترغب في استخدام السمة تقوم باستيرادها باستخدام الكلمة المحجوزة use.

<?php

trait Logger {

    public function log($message) {

        echo "[LOG]: " . $message;

    }

}


class User {

    use Logger;


    public function createUser($name) {

        $this->log("Creating user: " . $name);

    }

}


$user = new User();

$user->createUser("Muhmad"); // [LOG]: Creating user: Muhmad

?>



السمات والوراثة المتعددة:

على الرغم من أن PHP لا تدعم الوراثة المتعددة بشكل مباشر، إلا أن السمات توفر حلا بديلا لهذه المشكلة. يمكن للفئة أن تستورد سمات متعددة، مما يتيح لها استخدام وظائف متنوعة من مصادر مختلفة.

<?php

trait Logger {

    public function log($message) {

        echo "[LOG]: " . $message;

    }

}


trait Notifier {

    public function notify($message) {

        echo "[NOTIFY]: " . $message;

    }

}


class User {

    use Logger, Notifier;


    public function createUser($name) {

        $this->log("Creating user: " . $name);

        $this->notify("User created: " . $name);

    }

}


$user = new User();

$user->createUser("Muhmad"); 

// [LOG]: Creating user: Muhmad

// [NOTIFY]: User created: Muhmad

?>


معالجة تعارضات الأسماء في السمات

في حالة وجود تعارض أسماء بين طرق السمات المختلفة، يمكن حل التعارض باستخدام الكلمة المحجوزة insteadof لتحديد أي الدالة سيتم استخدامها، وas لإعادة تسمية الدالة.

<?php

trait Logger {

    public function log($message) {

        echo "[LOG]: " . $message;

    }

}


trait Debugger {

    public function log($message) {

        echo "[DEBUG]: " . $message;

    }

}


class User {

    use Logger, Debugger {

        Logger::log insteadof Debugger;

        Debugger::log as debugLog;

    }


    public function createUser($name) {

        $this->log("Creating user: " . $name);

        $this->debugLog("Debugging user creation.");

    }

}


$user = new User();

$user->createUser("Muhmad"); 

// [LOG]: Creating user: Muhmad

// [DEBUG]: Debugging user creation.

?>


أمثلة 

نظام تسجيل الدخول

<?php

trait Authenticator {

    public function authenticate($username, $password) {

        echo "Authenticating user: " . $username;

    }

}


class User {

    use Authenticator;


    public function login($username, $password) {

        $this->authenticate($username, $password);

    }

}


$user = new User();

$user->login("Muhmad-Omar", "password123_R"); // Authenticating user: Muhmad-Omar

?>





المراجع:


اسم المرجع

الرابط

w3docs

w3docs

w3schools

w3schools

slingacademy

slingacademy







Traits in PHP Traits in PHP بواسطة Remocolla Academy في يناير 27, 2026 تقييم: 5

ليست هناك تعليقات:

يتم التشغيل بواسطة Blogger.