You are on page 1of 44

‫‪PHP OOP‬‬

‫‪Traits‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪1‬‬


Traits
‫السمات‬
• What are Traits?
‫ما هي السمات؟‬
• PHP only supports single inheritance: a child class
can inherit only from one single parent.
‫ يمكن للفئة الفرعية أن ترث من‬:‫ الوراثة الفردية فقط‬PHP ‫• تدعم‬
.‫والد واحد فقط‬
• So, what if a class needs to inherit multiple
behaviors? OOP traits solve this problem.
‫ ماذا لو احتاج الكالس إلى وراثة سلوكيات متعددة؟ سمات‬، ‫• لذا‬
.‫ تحل هذه المشكلة‬OOP

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 2


Traits Cont..
• Traits are used to declare methods that can be used
in multiple classes. Traits can have methods and
abstract methods that can be used in multiple
classes, and the methods can have any access
modifier (public, private, or protected).
‫• نستخدم السمات لإلعالن عن الطرق التي يمكن استخدامها في فئات‬
‫ يمكن أن تحتوي السمات على طرق وأساليب مجردة يمكن‬.‫متعددة‬
‫ ويمكن أن تحتوي هذه الطرق على أي‬، ‫استخدامها في فئات متعددة‬
.)‫محول وصول (عام أو خاص أو محمي‬
• Traits are declared with the trait keyword:
:‫• يتم اإلعالن عن السمات بالكلمة األساسية للسمة‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 3


Syntax

<?php
trait TraitName {
// some code...
}
?>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 4


Syntax Cont..
• To use a trait in a class, use the use keyword:
:‫ استخدم الكلمة األساسية‬، ‫الستخدام سمة في الفئة‬
<?php
class MyClass {
use TraitName;
}
?>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 5


Example
<!DOCTYPE html>
<html>
<body>

<?php
trait message1 {
public function msg1() {
echo "OOP is fun! ";
}
}
‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 6
Example Cont..
class Welcome {
use message1;
}

$obj = new Welcome();


$obj->msg1();
?>

</body>
</html>
‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 7
‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪8‬‬


Example Explained
• Here, we declare one trait: message1. Then, we create
a class: Welcome. The class uses the trait, and all the
methods in the trait will be available in the class.
: ‫ ثم نقوم بإنشاء فئة‬message1. :‫ نعرف سمة واحدة‬، ‫• هنا‬
‫ وستكون جميع الطرق الموجودة في‬، ‫ يستخدم الفئة السمة‬.Welcome
.‫السمة متاحة في الفئة‬
• If other classes need to use the msg1() function, simply
use the message1 trait in those classes. This reduces
code duplication, because there is no need to redeclare
the same method over and over again.
‫ فما عليك‬،msg1 () ‫• اذا احتاجت الفئات األخرى إلى استخدام الدالة‬
‫ هذا يقلل من تكرار‬.‫ في تلك الفئات‬message1 ‫سوى استخدام سمة‬
.‫رارا‬
ً ‫مرارا وتك‬
ً ‫ ألنه ال توجد حاجة إلعادة تعريف نفس الطريقة‬، ‫الكود‬
‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 9
Using Multiple Traits-Example
<?php
trait message1 {
public function msg1() {
echo "OOP is fun! ";
}
}

trait message2 {
public function msg2() {
echo "OOP reduces code duplication!";
}
}

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 10


Example Cont..
class Welcome {
use message1;
}

class Welcome2 {
use message1, message2;
}

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 11


Example Cont..
$obj = new Welcome();
$obj->msg1();
echo "<br>";

$obj2 = new Welcome2();


$obj2->msg1();
$obj2->msg2();
?>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 12


‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪13‬‬


Example Explained
• Here, we declare two traits: message1 and
message2. Then, we create two classes: Welcome
and Welcome2. The first class (Welcome) uses the
message1 trait, and the second class (Welcome2)
uses both message1 and message2 traits (multiple
traits are separated by comma).
‫ ثم نقوم‬message2. ‫ و‬message1 :‫ نعلن عن سمتين‬، ‫• هنا‬
‫تستخدم الفئة األولى‬Welcome and Welcome2. :‫بإنشاء فئتين‬
‫ بينما تستخدم الفئة الثانية‬،message1 ‫) سمة‬Welcome(
‫ يتم فصل‬message2 ‫ و‬message1 ‫سمات‬Welcome2) (
.)‫السمات المتعددة بفاصلة‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 14


PHP - Static Methods
• Static methods can be called directly - without
creating an instance of the class first.
.ً‫ دون إنشاء كائن للفئة أوال‬- ‫• يمكن استدعاء الطرق الثابتة مباشرة‬
• Static methods are declared with the static
keyword:
:‫• يتم التصريح عن الطرق الثابتة بالكلمة األساسية الثابتة‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 15


Syntax
<?php
class ClassName {
public static function staticMethod() {
echo "Hello World!";
}
}
?>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 16


Syntax Cont..
• To access a static method use the class name,
double colon (::), and the method name:
‫ استخدم اسم الفئة والنقطتين المزدوجتين‬، ‫• للوصول إلى طريقة ثابتة‬
:‫) واسم الطريقة‬: :(
ClassName::staticMethod();

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 17


Example
<!DOCTYPE html>
<html>
<body>

<?php
class greeting {
public static function welcome() {
echo "Hello World!";
}
}

// Call static method


greeting::welcome();
?>

</body>
</html>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 18


‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪19‬‬


Example Explained
• Here, we declare a static method: welcome(). Then,
we call the static method by using the class name,
double colon (::), and the method name (without
creating an instance of the class first).
‫ نسمي الطريقة‬، ‫ بعد ذلك‬welcome() ‫ نعلن عن طريقة ثابتة‬، ‫• هنا‬
‫ واسم‬، ): :( ‫ والنقطتان المزدوجة‬، ‫الثابتة باستخدام اسم الفئة‬
.)ً‫الطريقة (بدون إنشاء كائن للفئة أوال‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 20


PHP - More on Static Methods
• A class can have both static and non-static
methods. A static method can be accessed from a
method in the same class using the self keyword
and double colon (::):
‫ يمكن الوصول‬.‫• يمكن للفئة أن يحتوي على طرق ثابتة وغير ثابتة‬
‫إلى طريقة ثابتة من طريقة في نفس الفئة باستخدام الكلمة األساسية‬
): :( ‫الذاتية والنقطتين المزدوجة‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 21


Example
<!DOCTYPE html>
<html>
<body>

<?php
class greeting {
public static function welcome() {
echo "Hello World!";
}

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 22


Example Cont..
public function __construct() {
self::welcome();
}
}

new greeting();// ‫يمكن استدعاء المشيد دون الحاجة الى انشاء كائن‬
?>

</body>
</html>
‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 23
‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪24‬‬


‫‪Note‬‬
‫‪• Static methods can also be called from methods in‬‬
‫‪other classes. To do this, the static method should‬‬
‫‪be public:‬‬
‫ضا استدعاء الطرق الثابتة من طرق في فئات أخرى‪ .‬للقيام‬‫• يمكن أي ً‬
‫بذلك ‪ ،‬يجب أن تكون الطريقة الثابتة عامة‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪25‬‬


Example
<!DOCTYPE html>
<html>
<body>

<?php
class greeting {
public static function welcome() {
echo "Hello World!";
}
}

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 26


Example Cont..
class SomeOtherClass {
public function message() {
greeting::welcome();
}
}
?>

</body>
</html>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 27


‫‪Note‬‬
‫‪▪ To call a static method from a child class, use the‬‬
‫‪parent keyword inside the child class. Here, the‬‬
‫‪static method can be public or protected.‬‬
‫▪ الستدعاء طريقة ثابتة من فئة فرعية ‪ ،‬استخدم الكلمة األساسية‬
‫األصل داخل الفصل الفرعي‪ .‬هنا ‪ ،‬يمكن أن تكون الطريقة الثابتة‬
‫عامة أو محمية‪.‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪28‬‬


Example
<!DOCTYPE html>
<html>
<body>

<?php
class domain {
protected static function getWebsiteName() {
return "W3Schools.com";
}
}

class domainW3 extends domain {


public $websiteName;
public function __construct() {
$this -> websiteName = parent::getWebsiteName();
}
}
‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 29
Example Cont..
$domainW3 = new domainW3;//‫ينشئ كائن واليستدعي المشيد‬
echo $domainW3 -> websiteName;
?>

</body>
</html>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 30


‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪31‬‬


PHP - Static Properties
• Static properties can be called directly - without
creating an instance of a class.
.‫ بدون إنشاء كائن للفئة‬- ‫• يمكن استدعاء الخصائص الثابتة مباشرة‬
• Static properties are declared with the static
keyword:
:‫• يتم التصريح عن الخصائص الثابتة بالكلمة األساسية الثابتة‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 32


Syntax
<?php
class ClassName {
public static $staticProp = "W3Schools";
}
?>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 33


Syntax Cont..
• To access a static property use the class
name, double colon (::), and the
property name:
‫ استخدم اسم الفئة والنقطتين المزدوجة‬، ‫• للوصول إلى خاصية ثابتة‬
:‫) واسم الخاصية‬: :(
ClassName::staticProp;

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 34


Example
<!DOCTYPE html>
<html>
<body>

<?php
class pi {
public static $value = 3.14159;
}

// Get static property


echo pi::$value;
?>

</body>
</html>
‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 35
‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪36‬‬


Example Explained
• Here, we declare a static property: $value. Then,
we echo the value of the static property by using
the class name, double colon (::), and the property
name.
‫ نكرر نطبع الخاصية‬، ‫ بعد ذلك‬.‫ القيمة‬:‫ نعلن عن خاصية ثابتة‬، ‫• هنا‬
‫ واسم‬، ): :( ‫ والنقطتان المزدوجة‬، ‫الثابتة باستخدام اسم الفئة‬
.‫الخاصية‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 37


PHP - More on Static Properties
• A class can have both static and non-static
properties. A static property can be accessed from
a method in the same class using the self keyword
and double colon (::):
‫ يمكن‬.‫• يمكن أن تحتوي الفئة على خصائص ثابتة وغير ثابتة‬
‫الوصول إلى خاصية ثابتة من طريقة في نفس الفئة باستخدام الكلمة‬
:): :( ‫ ونقطتين مزدوجتين‬self ‫األساسية‬

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 38


Example
<!DOCTYPE html>
<html>
<body>

<?php
class pi {
public static $value=3.14159;
public function staticValue() {
return self::$value;
}
}

// Get static property


$pi = new pi();
echo $pi->staticValue();
?>

</body>
</html>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 39


‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪40‬‬


‫‪Note‬‬
‫‪• To call a static property from a child class, use the‬‬
‫‪parent keyword inside the child class:‬‬
‫• الستدعاء خاصية ثابتة من فئة فرعية ‪ ،‬استخدم الكلمة األساسية‬
‫األب داخل فئة االبن‪:‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪41‬‬


Example
<!DOCTYPE html>
<html>
<body>

<?php
class pi {
public static $value=3.14159;
}

class x extends pi {
public function xStatic() {
return parent::$value;
}
}

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 42


Example Cont..
// Get value of static property directly via child class
echo x::$value;

// Get value of static property via xStatic() method


$x = new x();
echo $x->xStatic();
?>

</body>
</html>

‫ م‬06:53 22/12/2020 ‫إبراهيم النظامي‬.‫اعداد د‬ 43


‫‪Result‬‬

‫‪ 06:53 22/12/2020‬م‬ ‫اعداد د‪.‬إبراهيم النظامي‬ ‫‪44‬‬

You might also like