• 0
ahmedsaoud31

برمجة الكائنات فى لغة php

سؤال

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

ما سيتم سرده فى هذا الموضوع هو ملخص سريع للــ ( برمجة الكائنات أو البرمجة الشيئية أو البرمجة كائنية المنحى أو البرمجة الكائنية أو البرمجة الموجهة بالكائنات ) ,
تستطيع أن تختار منها ما يحلو لك لترجمة Object Oriented Programming

لماذا يجب علىَّ أن أتعلم برمجة الكائنات, على الرغم أننى أستطيع تنفيذ أعمالى بدونها ؟
- إذا كنت ممن ينوى أن يعمل على إطار عمل فالأفضل تعلم برمجة الكائنات لأن أطر العمل الحالية مبنية بمبدأ البرمجة الكائنية , وهذه بعض منها :
1- Yii
2- CodeIgniter
3- CakePHP
4- Zend Framework
5- Symfony

- إن كنت تنوى الخوض فى مجال فصل الكود البرمجى عن التصميم وستقوم بإستخدام أى من القوالب فى هذا المجال فأنت تحتاج لتعلم البرمجة الكائنية , وهذه بعض منها :
1- smarty
2- dwoo
3- Template Blocks
4- Open Power
5- القالب السهل

- إذا كنت ستقوم بعمل أكواد خاصة لك وستستخدمها فيما بعد فى تطبيقاتك وتريد إستخدامها والتعديل عليها بسهوله فيما بعد فعليك بالبرمجة الكائنية .
- إذا كنت ستستخدم "أساليب التصاميم" "Design Patterns" وهى عبارة عن الأساليب المتبعة فى تنفيذ غرض برمجى ما بأفضل الطرق الممكنة للحصول على أعلى أداء وأعلى حماية فيجب عليك أيضاً تعلم برمجة الكائنات .
- البرمجة الكائنية ليست مقتصره على لغة بعينها بل أغلب اللغات الحديثة تدعم مبدأ برمجة الكائنات , فتعلُمك هذا المبدأ سيفيدك إن حاولت تعلم لغة أخرى .
- هناك إجابات أخرى كثيرة لهذا السؤال أتركها لك لتبحث عنها أو تجيبها بنفسك بعد إنهاء هذه الدورة .

بالنسبة للترجمة سيتم وضع المصطلحات وترجماتها الوارده فى الشرح حتى لا يلتبس عليك الأمر إن قرأت مصطلح بترجمة مختلفة لأنه لا إتفاق حتى الآن على توحيد ترجمة المصطلحات.
class : فئة
public : عام
private : خاص
protected : محمى
extends : يرث
object : كائن
static : ساكن
constructor : بانى
destructor : هادم
abstract : مجرد
final : نهائى


وإن مر علينا أى من المصطلحات أثناء الشرح سيتم كتابتها بإذن الله .

سنتحدث عن المواضيع التالية فى البرمجة الكائنية :
1- إنشاء الفئة وإنشاء كائن من الفئة .

2- الكلمة المحجوزة $this
3- محددات الوصول .

4- تمرير الدوال والمتغيرات الخاصة والمحمية عبر الدوال العامة .

5- الثابت وإستخدامة فى الفئة .
6- المتغيرات الساكنه .
7- الوراثة .
8- الفئات المجردة .
9- الفئات النهائية .
10- دوال البناء والهدم .


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

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

تم تعديل بواسطه ahmedsaoud31
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

7 إجابة على هذا السؤال .

  • 0

السلام عليكم

1- إنشاء الفئة وإنشاء كائن من الفئة :

- إذا أردت أن تنشئ فئة ما عليك إلا كتابة الكلمة المحجوزة class ثم اسم الفئة بهذا الشكل :

<?php
class myClass {

}
?>

وبهذا قمت بإنشاء فئة باسم myClass والآن أكتب ما يحلو لك من الأكواد والدوال الإعتيادية داخل هذه الفئة سنكتب كود بسيط داخل الفئة كالتالى :

<?php
class myClass {
public $name="ahmed";
public function F_print(){
echo "I'm ahmed";
}
}
?>

لا تهتم بالكلمة public فسيأتى شرحها فيما بعد , قمت بوضع متغير باسم name$ ودالة باسم F_print والآن أريد أن أستخدم هذه الفئة وهذا ما يعرف بإنشاء كائن من الفئة لإستخدامه.

وعلى هذا عندما نريد أن نستخدم فئة معينة يجب أن نقوم بإنشاء كائن من هذه الفئة لنستطيع إستخدامها ويكون هذا على الشكل التالى :

$opj = new myClass();

قمت بإنشاء كائن باسم opj$ من الفئة myClass ولاحظ السطر البرمجى السابق جيداً فالكلمة المحجوزة new هى التى تقوم بإنشاء الكائن من الفئة ولاحظ أيضاً الأقواس التى تأتى بعد اسم الفئة .

والآن وبعد إنشاء الكائن Opj$ كيف لى أن أستخدمه ؟

يستخدم الكائن على النحو التالى للوصول لمتغيرات ودوال الفئة :

$opj->name;
$opj->F_print();

يتم الوصول للمتغيرات والدوال من خلال العلامة -> ولاحظ عدم وجود العلامة $ قبل اسماء المتغيرات .

مثال على ما سبق :

<?php
class myClass {
public $name="ahmed";
public function F_print(){
echo "I'm ahmed";
}
}
$opj = new myClass();
echo $opj->name;
echo "<br>";
$opj->F_print();
?>

تم إنشاء الكائن opj$ وطباعة المتغير name$ وإستدعاء الدالة F_print ولاحظ أنه لم يتم إسناد الدالة لمتغير لأنها لا تعود بقيمة .

وبهذا تعلمنا كيفية إنشاء الفئة وإنشاء كائن من الفئة لنستطيع إستخدام الفئة من خلال هذا الكائن .

يمكنكم وضع إستفساراتكم إن وجد شئ غير واضح فيما سبق

دمتم فى رعاية الله

myClass.php

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

2- الكلمة المحجوزة $this

يتم الوصول لمكونات الفئة من خلال الكلمة $this كما فى الكود التالى :

<?php
class myClass2 {
public $name="ahmed";
public function F_print(){
echo $this->name;
}
public function F_print2(){
echo $this->F_print();
}
}
$opj = new myClass2();
$opj->F_print2();
?>

تم إستخدام الكلمة $this ثم الرمز -> للوصل لكل من المتغير $name والدالة F_print , وبهذه الطريقة يمكن إستخدام أى من مكونات الفئة من متغيرات أو دوال .

ثم بعد ذلك تم إنشاء كائن باسم $opj من الفئة myClass2 وتم إستدعاء الدالة F_print2 من خلال هذا الكائن .

3- محددات الوصول :

- نعنى بمحددات الوصول هى الطريقة التى يتم الوصول بها إلى مكونات الفئة من متغيرات ودوال والتالى شرح لها :

1- public : محدد الوصول العام وهذا يعنى أنه يتم الوصول إلى مكونات الفئة بصورة عامة أى غير مقيدة .

2- private : محدد الوصول الخاص , ويتم إستخدام المكونات المعرفة على أنها خاصة داخل الفئة الموجودة بها فقط , وغير مسموح بإستخدامها خارج إطار الفئة سواء عن طريق الكائن المنشأ من الفئة أو من خلال توريث هذه الفئة .

3- protected : محدد الوصول المحمى , ويتم إستخدام المكونات المعرفة على أنها محمية داخل الفئة ومن خلال توريث الفئة فقط , ولا يصلح إستخدام المكونات المحمية من خلال الكائن المنشأ من الفئة .

أمثلة لفهم كيفية عمل محددات الوصول :

<?php
class myClass3 {
public $name="ahmed";
private $name2="mohammed";
protected $name3="khaled";
public function F_print(){
echo "I'm Ahmed !";
}
private function F_print2(){
echo "I'm Mohammed !";
}
protected function F_print3(){
echo "I'm Khaled !";
}

}
$opj = new myClass3();
$opj->name="majed";
echo $opj->name;
echo "<br>";
$opj->F_print();
?>

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

- بعد إنشاء الكائن $opj من الفئة myClass3 تم تغيير قيمة المتغير $name ثم طباعته ثم طباعة سطر جديد ثم إستدعاء الدالة F_print

- سيعطينا المترجم أخطاء عند محاولة الوصول للمكونات الخاصة أو المحمية كالتلى :

$opj = new myClass3();
$opj->name2="majed";
echo "<br>";
$opj->F_print2();

هذا الكود خاطئ لأنها تعتبر محاولة الوصول لمكونات خاصة

$opj = new myClass3();
$opj->name3="majed";
echo "<br>";
$opj->F_print3();

هذا الكود خاطئ لأنها تعتبر محاولة الوصول لمكونات محمية

- يمكن التعامل مع المكونات الخاصة داخل الفئة فقط , والتعامل مع المكونات المحمية داخل الفئة وعند التوريث "سيأتى الحديث عنها فى الوراثة فيما بعد" .

- ولهذا تستخدم محددات الوصول لمنع الوصول الغير مرغوب لبعض القيم والدوال أو تغيير قيمهم .

4- تمرير الدوال والمتغيرات الخاصة والمحمية عبر الدوال العامة :

- يمكن الوصول وتغيير قيم لمكونات خاصة ومحمية من خلال تمريرها فى الدوال العامة , والتالى مثال يوضح هذا :

<?php
class myClass4 {
private $name="ahmed";
private $name2="mohammed";
protected $name3="khaled";
public function setName($value){
return $this->name=$value;
}
public function getName(){
return $this->name;
}
private function F_print2(){
return $this->name2;
}
public function F_print3(){
return $this->name3;
}
public function F_print4(){
return $this->F_print2();
}
}
$opj = new myClass4();
$opj->setName("Tamer");
echo $opj->getName();
echo "<br>";
echo $opj->F_print3();
echo "<br>";
echo $opj->F_print4();
echo "<br>";
?>

من خلال الدوال العامة نستطيع الوصول للمكونات العامة والخاصة للفئة وتغيير قيمها , تم إنشاء كائن $opj وتم إستدعاء الدالة setName التى تقوم بتغيير قيمة المتغير الخاص $name والدالة getName تقوم بإرجاع قيمة المتغير الخاص $name , والدالة F_print3 تقوم بإعادة قيمة المتغير المحمى $name3 , والدالة F_print4 تعيد قيمة الدالة الخاصة F_print .

وإلى هنا والسلام عليكم ورحمة الله

myClass2.php

myClass3.php

myClass4.php

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

5- الثابت وإستخدامة فى الفئة :

- يتم تعريف الثابت بإستخدام الكلمة المحجوزة const ويفضل أن يكون اسم الثابت بالحروف الكبيرة والثابت يكتب بدون العلامة $ ويجب إعطاء الثابت قيمة عند تعريفة ولا نستطيع تغيير هذه القيمة فيما بعد لأنها ثابته .

- عندما نريد إستخدام الثابت لا نستخدم طريقة إنشاء كائن من الفئة كما سبق ولكن نقوم بكتابة اسم الفئة ثم العامتين :: ثم اسم الثابت

* مثال على ما سبق :

<?php
class myClass5 {
const NAME="Ahmed";
}

echo myClass5::NAME;

?>

- إذا أردنا إستخدام الثابت داخل الفئة نقوم بكتابة الكلمة المحجوزة self ثم العلامتينن :: ثم اسم الثابت , يمكن إستخدام اسم الفئة ولكن يفضل استخدام self تحسباً لإحتمال تغيير اسم الفئة فيما بعد فلا تضطر لتغيير اسم الفئة فى جميع المواضع .

* مثال على ما سبق :

<?php
class myClass5 {
const NAME="Ahmed";
public function test(){
return self::NAME;
}
}

echo myClass5::NAME;
echo "<br>";
$obj=new myClass5();
echo $obj->test();
?>

6- المتغيرات الساكنه :

- يتم تعريف متغير على أنه ساكن بإستخدام الكلمة المجوزة static والمتغير من النوع الساكن يظل محتفظ بقيمتة داخل الفئة إلى أن ينتهى عمل الفئة وهو يشبة فى هذا عمل المتغيرات التى تعرف فى بداية الفئة ولكن فى بعض الأحيان نحتاج لتعريف متغيرات داخل الدوال ونريد أن تظل قيمتها محفوظة داخل المتغير ولا تنتهي بإنتهاء عمل الدالة ولهذا نقوم بتعريف المتغير على أنه ساكن , ولهذا تستخدم static لتعريف المتغيرات داخل الدوال .

- وأيضاً لاحظ تجاهل القيمة الإبتدائية التى تسند للمتغير الساكن عند تعريفة داخل الدالة .

* مثال لتوضيح ما سبق :

<?php
class myClass6 {
public function test(){
$t=0;
$t++;
return $t;
}

public function test2(){
static $t2=0;
$t2++;
return $t2;
}

public function test3(){
echo $this->test()."<br>";
echo $this->test()."<br>";
echo $this->test()."<br>";
echo "---------------<br>";
echo $this->test2()."<br>";
echo $this->test2()."<br>";
echo $this->test2()."<br>";
}

}

$obj=new myClass6();
$obj->test3();

?>

* تعريف المتغيرات الساكنة داخل الدوال يجعلنا لا نستطيع إستخدام هذه المتغيرات خارج النطاق المعرفة به لأنها تعتبر متغيرات محلية ذات طابع خاص , ولتعريف متغيرات عامة من النوع الساكن يتم الوصول إليها من خلال الكلمة المحجوزة self ثم العلامتين :: ثم اسم المتغير الساكن ولا ننسى علامة $ خلاف المتغير الثابت .

- ولإستخدام المتغيرات الساكنة خارج نطاق الفئة نكتب اسم الفئة متبوعاً بالعلامتين :: ثم اسم المتغير الساكن .

* مثال على هذا :

<?php
class myClass7 {

public static $name="Ahmed";
private static $name2="Mahmoud";

public function test(){
return self::$name2;
}

}

echo myClass7::$name;
echo "<br>";
$obj=new myClass7();
echo $obj->test();

?>

* الدوال الساكنة :

- يتم تعريف الدوال على أنها ساكنة ولكن فى هذه الحالة لا نستطيع إستخدام الكلمة $this أى لا نستطيع إستخدام مكونات الفئة داخلها ولكن يمكن إستخدام المكونات المعرفة على أنها ساكنة داخل الدوال الساكنة , ويمكن إستخدام المكونات الساكنة داخل الفئة بكتابة Self ثم :: ثم اسم العنصر الساكن , وعند إستدعاء الدالة خارج الفئة نكتب اسم الفئة ثم :: ثم اسم الدالة .

وهذا مثال لما سبق :

<?php
class myClass8 {

public static $name="Ahmed";

public static function test(){
return self::$name;
}

public static function test2(){
return self::test();
}

}

echo myClass8::test2();

?>

لمزيد من المعلومات والأكواد حول static

myClass5.php

myClass6.php

myClass7.php

myClass8.php

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

7- الوراثة :

- لماذا تستخدم الوراثة ؟

- تستخدم الوراثة لتوفير الوقت فى إعادة كتابة الأكواد البرمجية التى نحتاجها بإستمرار , وسيتضح هذا فيما يلى :

- الوراثة الاسم يشرح نفسه فهى عملية وراثة مكونات الفئة الموروثة فى الفئة الوارثة أى إمكانية إستخدام مكونات الفئة الموروثة - من دوال ومتغيرات - فى الفئة الوارثة .

وتتم عملية الوراثة بكتابة الكلمة المحجوزة extends كالتالى :

<?php
include('A.php');

class B extends A {

}

?>

وهنا الفئة B قامت بوراثة مكونات الفئة A .

- ما الذى يتم وراثتة وما الذى لا يتم وراثتة ؟

- يتم وراثة المكونات المعرفة على أنها عامة أو محمية ولا يتم توريث المكونات المعرفة على أنها خاصة .

هذا مثال على ما سبق :

<?php

class A {
public $name='ahmed';
private $name2='khaled';
protected $name3='mohammed';
}

class B extends A {
public function test(){
echo $this->name;
echo "<br>";
//echo $this->name2;
echo $this->name3;
}
}

$obj=new B();
echo $obj->test();
echo "<br>";
echo $obj->name;
?>

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

- كيف نستخدم المكونات الموروثة ؟

- نستخدم الكلمة المحجوزة $this للوصول لمكونات الفئة الموروثة ولكن فى حالة الثوابت والمكونات المعرفة على أنها ساكنة يتم إستخدام الكلمة المحجوزة parent ثم يتبعها :: ثم اسم الثابت أو العنصر الساكن ملحوظة :" الثابت لا تسبقة العلامة $ ولكن تسبق العناصر الساكنة " وهذا مثال على ما سبق :

<?php

class A {
const NAME="Yaser";
public static $name='ahmed';
private static $name2='jamal';
}

class B extends A {
const NAME2="Waleed";
private static $name3='omar';

public function test(){
echo parent::NAME;
echo "<br>";
echo parent::$name;
echo "<br>";
echo self::NAME2;
echo "<br>";
echo self::$name3;
}
}

echo B::NAME;
echo "<br>";
echo B::$name;
echo "<br>";
echo B::NAME;
echo "<br>";
$obj=new B();
echo $obj->test();
?>

- لاحظ أن الفئة B قامت بوراثة جميع المكونات - عادا الخاصة - من الفئة A وبالتالى إستطعنا إستخدامها من خلال الكائن المنشأ من الفئة B , ولاحظ أيضاً إستخدام الكلمة parent للقيم الثابتة والساكنة من الفئة العليا A وإستخدام self للقيم الثابتة والساكنة من الفئة الحالية B

* التحميل الزائد للطرق أو الدوال :

- هو عملية تعريف نفس اسم دالة موجودة فى الفئة العليا وإعادة إستخدامها فى الفئة الوارثة , أى بمعنى تعمل الدالة عملها بالإضافة لعمل جديد سيضاف للدالة فى الفئة الحالية "الوارثة" مثال على ذلك :

<?php

class A {
public function test(){
echo "ahmed";
}
}

class B extends A {
public function test(){
parent::test();
echo "<br>";
echo "jamal";
}
}

$obj=new B();
echo $obj->test();
?>

- لاحظ تم إستخدام كلمة parent للدلالة على أن تلك الدالة تنتمى للفئة العليا A ولو إستخدمنا $this لكانت الدالة سوف تستدعى نفسها أى تستدعى الدلة الموجودة فى الفئة الحالية B , وعند إنشاء كائن من الفئة B يتم إستخدام الدلة الموجودة فى الفئة B بعد أن تمت عليها العملية التى تعرف بالتحميل الزائد للدوال

* الفئة المجردة :

- نعنى بفئة مجردة أى أن هذه الفئة عبارة عن قالب ولا يمكن إنشاء كائن من هذه الفئة ولكنها تكون مخصصة فقط للتوريث .

- فإذا أردت عمل فئة ولا تريد إلا أن تستخدم إلا فى التوريث فقط فستضع قبل اسم الفئة الكلمة المحجوزة abstract كالتالى :

<?php

abstract class A {

public function test(){
echo "ahmed";
}
}

class B extends A {
public function test2(){
$this->test();
}
}

//$obj=new A();
//echo $obj->test();

$obj=new B();
echo $obj->test2();
?>

- لا حظ الكود الموجود فى التعليق وهو محاولة إنشاء كائن من الفئة المجردة A وهذا لا يصلح وإن فعَّلت هذا الكود سينتج خطأ الوصول لفئة مجردة من خلال الكائن .

- يتم تعريف الدوال المجردة داخل الفئة المجردة , نعنى بالدوال المجردة أى شكل ثابت للدوال يجب إتباعة عند توريث هذه الفئة المجردة وهى كما قلت فى الأعلى عبارة عن قالب , ولهذا يجب إعادة تعريف الدوال المجردة عند عملية الوراثة لهذه الفئة المجردة مثال على هذا :

<?php

abstract class A {

abstract public function test();
abstract protected function test2();
//abstract private function test3();
abstract public function test4($var1,$var2);
}

class B extends A {
public function test(){
echo "ahmed";
}
public function test2(){
echo "mostafa";
}
public function test4($var1,$var2){
echo $var1.$var2;
}
}


$obj=new B();
echo $obj->test();
echo "<br>";
echo $obj->test2();
echo "<br>";
echo $obj->test4("kaled "," mohammed");
?>

- نلاحظ أن تعريف الدوال المجردة يكون بدون جسم الدالة .

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

- يجب إعادة تعريف الدوال المعرفة على أنها مجردة فى الفئة العليا A بدون وضع الكلمة abstract وبعد ذلك يتم وضع جسم الدالة المراد عمله .

* الفئات النهائية :

- هى فئات لايصلح توريثها , ويتم تعريف الفئة على أنها نهائية بإستخدام الكلمة المحجوزة final كالتالى :

<?php

final class A {

public $name="ahmed";
private $name2="mostafa";
protected $name3="jamal";
}

/*class B extends A {

}


$obj=new B();
echo $obj->name;
*/

$obj=new A();
echo $obj->name;
//echo $obj->name2;
//echo $obj->name3;
?>

- ولاحظ أنه لو تم تفعيل الكود الموجود فى التعليق سيحدث خطأ لأنها عملية وراثة لفئة نهاية .

- وأيضاً لاحظ أنه فى حالة الفئة النهائية يكون عمل private مساوى لعمل protected حيث أن هذه الفئة لايمكن توريثها .

* الواجهات interfaces :

- وهى تشبه الفئات المجردة إلا أنها لايمكن تعريف دوال كاملة بها بل يتم تعريف الدوال بدون جسم فقط أى لا تكتب دوال تقوم بعمل ما داخلها , ويمكن للواجهات أن ترث بعضها البعض بإستخدام الكلمة المحجوزة extends وعندما ترث الفئة الواجهة نستخدم الكلمة المحجوزة implements ويمكن للفئة أن ترث أكثر من واجهه ويفصل بينها بفاصلة مثال على ما سبق :

<?php
interface A {
public function test();
}

interface B {
public function test2();
}

interface C extends A {
public function test3();
}

class D implements B,C{
public function test(){
echo "test";
}
public function test2(){
echo "test2";
}
public function test3(){
echo "test3";
}
}

$obj=new D();
$obj->test();
echo "<br>";
$obj->test2();
echo "<br>";
$obj->test3();
?>

* السمات trait :

- السمات هى عبارة عن طريقة للتخلص من القيود التى فرضتها الوراثة الفردية وأعنى بالوراثة الفردية هى أن لفة php لا تدعم الوراثة المتعدده كما فى لغة c++ لان الوراثة المتعدده على رغم قوتها فى تسبب كثير من المشاكل والتعقيد ولهذا أنتجت php ما يعرف بالسمات .

- يتم تعريف السمة من خلال الكلمة المحجوزة trait ويتم إستخدام السمات فى الفئة من خلال الكلمة المحجوزة use وهذا مثال لتوضيح عمل السمات :

<?php

trait A{
public function test() {
return "ahmed";
}
}
trait B{
public function test2() {
return "mostafa";
}
}
class C{
use A,B;
}

$obj = new C();
echo $obj->test();
echo "<br>";
echo $obj->test2();

?>

- تم إنشاء كائن من الفئة C ومن خلالة تم الوصول للدوال الموجودة فى السمة A والسمة B وكأن الفئة C قامت بعملية وراثة متعددة لكلاً من A,B

ملاحظة : يجب إستخدام نسخة php 5.4 فما فوق حتى تعمل معك جميع الأكواد بشكل مضبوط .

دمتم فى رعاية الله

myClass9.php

myClass10.php

myClass11.php

myClass12.php

myClass13.php

myClass14.php

myClass15.php

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

* دوال البناء والهدم :

ماهى دوال البناء والهدم ؟

- هى دوال معرفة مسبقاً فى اللغة لغرض معين .

1- دالة البناء __construct() :

- وتقوم الفئة بشغيل هذه الدالة أول شئ , وتستخدم فى إسناد القيم للمتغيرات وتشغيل دوال تريد تشغيلها عند بدأ عمل الفئة وأشياء أخرى من هذا القبيل .

2- دالة الهدم __destruct() :

- وتقوم الفئة بتشغيل هذه الدالة أخر شئ , وتستخدم فى إنهاء أو تنفيذ شئ معين عند الوصول لنهاية الفئة .

<?php 

class A{

public $name;
private $name2;
protected $name3;

public function __construct(){

$this->name = "ahmed";
$this->name2 = "mohammed";
$this->name3 = "jamal";
echo $this->name;
echo "<br>";
echo $this->name2;
echo "<br>";
echo $this->name3;
echo "<br>";
$this->test();
}

public function __destruct(){
echo "<br>";
echo "yossef";
}

public function test(){
echo "Kareem";
}

}

$obj = new A();
?>

ملحوظة : دالة البناء يمكن أن تأخذ قيم "وسيط" , ويتم تمرير هذه القيم إليها عند إنشاء كائن من الفئة , ودالة الهدم لا تأخذ أى قيم كوسيط .

وهذا مثال على ما سبق :

<?php 

class A{

public $name;
private $name2;
protected $name3;

public function __construct($n1,$n2,$n3,$n4){

$this->name = $n1;
$this->name2 = $n2;
$this->name3 = $n3;
echo $this->name;
echo "<br>";
echo $this->name2;
echo "<br>";
echo $this->name3;
echo "<br>";
$this->test($n4);
}

public function __destruct(){
echo "<br>";
echo "yossef";
}

public function test($n){
echo $n;
}

}

$obj = new A("ahmed","mohammed","khaled","jamal");
?>

- أعلم أنى لم أغطى جميع نواحى البرمجة الكائنية ولكن كما ذكرت فى بداية الموضوع أن هذا عبارة ملخص سريع عن البرمجة الكائنية , ومن يريد أن يتعمق أكثر فى مفهوم البرمجة الكائنية عليه بأحد المراجع المتخصصة فى هذا المجال

- أرحب بأى أحد يريد إضافة جزئية للموضوع لإثراءه أو تصحيح خطأ ما فيما سبق .

إلا لقاء أخر وتطبيقات على برمجة الكائنات

والسلام عليكم ورحمة الله وبركاتة

myClass16.php

myClass17.php

تم تعديل بواسطه ahmedsaoud31
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .