• php
  • 13281
  • 15-7-2008
  • حازم علي
  • بسم الله الرحمن الرحيم سأقوم بسرد ما نحتاجه في هذه المقالة في عناوين و من ثم شرحها كلٍٍ علي حدى
    محتويات المقالة :-
    1- ما هو الكائن 2- إنشاء الكائن 3- تحديد الخواص 4- تحديد الأفعال &-استخدام الافعال و الخواص
    &- استخدام الكائن 5- الوراثة 6- الدالة construct و destruct 7- نسخ الكائن 8- تجريد الكائن 9- الكلمات ألمفتاحيه private, public, protected 10- الثوابت 11- نظره شامله علي الكائن 12- أمثله علي البرمجة ألكائنيه ------------------------------------------------- 1- ما هو الكائن : بدأت php استخدام البرمجة الموجهة لكائن و المعروفة في معظم لغات البرمجة Object Oriented Program(OOp ) بداية من PHP4 ثم تطورت في PHP5 مما أدى إلي سرعة كتابه الاسكربتات و إضافة خواص جديدة إلى هذه الأسكربتات منها زيادة الاستفادة من المحرك Zend و التي أدت إلي زيادة سرعة تشغيل الاسكربت الذي يحتوي علي كائن عن ما كان عليه في الإصدار php4 & الكائن ببساطه :
    الكائن بكل بساطه هو كل ما هو موجود في هذا الوجود علي سبيل المثال الإنسان ما الذي نلاحظه في الإنسان بشكل عام دون الخوض في تفاصيل الإنسان جسمه يتكون من رأس و رجلان و ذراعان جيد الانسان يمتلك ذراعان لذلك هو يستطيع استخدمها في حياته مثلاً نستخدم الزراع في حمل الأشياء الان استطعنا ربط تكوين الإنسان بأفعاله فإن كان لا يملك ذراعيين فلن يستطيع استخدمها في حمل الأشياء إذاً لكل فعل خاصية يجب ان تكون متوافره في الكائن الخلاصه الكائن يتكون من خواص و الأفعال لنكبر المثال أكثر لدينا قاعدة بيانات و نريد عمل كائن تكون مهمته هي الاتصال بهذه القاعدة و جلب المعلومات منها إذاً سنحتاج تحديد خواص لهذا الكائن تجعله مناسب لهذه المهمة مثلاً نجعله قادر علي الاحتفاظ بما يجلبه من قاعدة البيانات في مصفوفة حتى نستطيع فيما بعد التحكم في هذه البيانات جميل جداً و لكن هل تعتقد معي أن الخواص واحدها كافية لجعله قادر علي القيام بهذه المهمة بالشكل الأمثل الإجابة هي لا فالطفل الرضيع يمتلك كل الخواص التي تجعله يمشي و يتكلم و لكنه لا يستطيع عمل ذلك بدون تدريب و نضوج من هنا يجب علي المبرمج استخدام عقله في إنشاء أفعال الكائن فلا يمكن مثلاً عمل فعل في الكائن يقوم بقطع الاتصال بقاعدة البيانات و هو لم يقوم في الاصل بعمل الاتصال من بهذه القاعدة كل هذه الأشياء سنتناولها بشكل مٌفصل فيما بعد فلا تقلق بشأنها. 2- إنشاء الكائن: كل ما عليك لإنشاء الكائن استخدام هذه الجمله
    Class اسم الكائن

    {

    //محتويات الكائن كخواصه و أفعاله

    }
    3- تحديد خواص الكائن
    كما تكلمنا سابقاً عن الخواص التي يجب تحديدها للكائن حتي يستطيع ان يعتمد عليها في افعاله في الكائنات يتم تحديد الخواص من خلال وضعها في متغيرات عن طريق الكلمة المفتاحيه var
    مثال :

    class TV // قمنا بعمل كائن بأسم TV

    {



    var اسم الخاصيه ;

    }

    class TV // قمنا بعمل كائن بأسم TV

    { var $tardod= 12036; // قمنا بإنشاء متغير كخصيه يحمل الرقم

    // 12036 بشكل إفتراضي

    }

    ملحوظه ما يساويه المتغير يكون هو قيمة المتغير الافتراضيه يعني يمكن تغيرها فيما بعد
    مثال اخر
    class TV // قمنا بعمل كائن بأسم TV

    {

    var $tardod= array(); // قمنا بإنشاء متغير يحمل مصفوفه خاليه

    }

    3- تحديد افعال الكائن افعال الكائن هي الوظائف التي يقوم بها و معنى كلمة وظيفة في الانجليزيه هي Function هي نفس الطريقة المستخدمه في صنع وظائف أو افعال الكائن أو الفئه الخاصه به class قد تسأل نفسك لماذا نستخدمها في الكائن و من الممكن استخدمها بشكل مباشر دون هذه التعقيدات طبعاً يوجد فرق كبير جداً و هي ان الدوال في الكائن أو الوظائف تتيح لك ربطها بالخصائص و كذلك ربط الوظائف مع بعضها و ايضاً كل كائن يحمل وظائف يعبر عن جزء من البرنامج بمفرده علي عكس الدوال لوحدها مثال
    class TV

    {
    function اسم الوظيفه ()
    { // محتوايات الوظيفه }

    }

    مثال
    class TV

    {
    function print_msg ($message)
    { print \"<div>$message</div>\"; }

    }
    &-استخدام الافعال و الخواص بعد ما عرفنا كيف نقوم بتحديد افعال و خصائص الكائن سنحتاج لربطهم ببعض عن طريق الكلمة
    $this->
    مثال
    class TV // كائن التلفاز
    {
    // متغير يحمل لون التليفاز
    var $color= \'اسود \';
    function tv_color()
    { echo \" لون التلفاز هو
    $this-> color\";
    } /* استخدمنا الكلمه $this-> في استدعاء المتغير color */ }
    اذا اردت استدعاء متغير داخل الكائن عن طريق الكلمة
    $this->يجب كتابتها هكذا

    $this->المتغير
    و ليس
    $this->$المتغير
    و كذلك عن طريق هذه الكلمة تستطيع استعداء الدوال داخل بعضها ملحوظه : لا يتم استخدام هذه الكلمة إللا داخل الدوال فقط مثال
    class TV // كائن التلفاز
    {
    // متغير يحمل لون التليفاز
    var $color= \'اسود \';
    function tv_color()
    { return\" لون التلفاز هو
    $this-> color\";
    }
    function total()
    { print $this->tv_color(); // قمنا بإستدعاء الداله tv_color
    // التي تقوم بطباعة لون التلفاز } }
    &- استخدام الكائن
    بعد إنشاء الكائن و تحديد خواصه و افعاله و ربطها ببعض يتم استخدام الكائن عن طريق الكلمة new مثال
    // عملية استدعاء الكائن $tv = new اسم الكائن ; // و لو اردنا استخدام احد خواص و التعديل عليها أو أحد الوظائف $tv->اسم الوظيفه();
    مثال
    class TV // كائن التلفاز
    {
    // متغير يحمل لون التليفاز
    var $color= \'اسود \';
    function tv_color()
    { return\" لون التلفاز هو
    $this-> color\";
    }
    function total()
    { print $this->tv_color(); // قمنا بإستدعاء الداله tv_color
    // التي تقوم بطباعة لون التلفاز }
    } $tv= new TV; $tv->color=\'أحمر\'; print $tv->total();

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

    class A
    {


    }


    class B extends اسم الكائن المراد الإرث منه
    {


    }

    ملحوظه : الكائن الوريث يحتوي علي كل محتويات الكائن المورث أما الكائن المورث لا يحتوي علي صفات الكائن الوريث
    مثال

    class A
    {

    var $name=\'الوراثه تختصر الوقت \';

    }


    class B extends A
    {

    function msg()
    {

    echo $this->name; // استطعنا استخدام احد خصائص الكائن الاب
    // A
    // لأنه ورث كل محتويات الكائن
    // A

    }

    }

    6- الدالة construct و destruct &مؤسس الصنف construct
    ما هي مؤسس الصنف ؟ عندما تقوم ببناء الكائن قد تحتاج وضع إعدادات إفتراضيه له أو طباعة شيئاً معين عند استدعاء الكائن فجائت ال php 5 بإضافة الكلمة المفتاحيه
    __construct

    مثال
    class TV
    {


    function __construct()
    {

    echo \"تم إنشاء الكائن \";

    }


    }


    $tv = new TV ; // سيتم طباعة ما في مؤسس الصنف
    &مدمر الصنف destruct
    مثلاً عندما نقوم بمحو متغير الكائن من الذاكره عن طريق الداله
    unset()
    قد نحتاج لإجراء معين كمثلاً طباعة جملة معينه أو محو اشياء من الذاكره مثال
    class TV
    {


    function __construct()
    {

    echo \"تم إنشاء الكائن \";

    }

    function __destruct()
    {

    echo \"تم مسح الكائن\";

    }

    }


    $tv = new TV ; // سيتم طباعة ما في مؤسس الصنف

    unset($tv); // سيتم طباعة ما في مدمر الصنف

    7- نسخ الكائن
    يتم نسخ الكائن عن طريق الكلمه المفتاحيه
    clone

    مثال
    class c
    {

    var $num=50;

    }

    $c= new c;
    $s= clone $c; // تمت عملية النسخ و اصبح لدينا الكائن المنسوخ تحت المتغير $s

    echo $c->num;

    echo \"<br/>\";

    echo $s->num;

    و لكن في بعض الاشياء نريد تميير الكائن المنسوخ بالتعديل علي بعض الخواص
    يتم ذلك من خلال الكلمة المفتاحيه
    __clone
    مثال
    class table
    {

    var $border = 3;
    var $color = \"red\";

    function inputItem( $num )
    {

    $this->border = $this->border + $num ;

    print \" $num حجم حدود الجدول هو \";

    }

    function __clone()
    {

    $this->border = 0 ;
    }

    }

    $firstTable = new table;
    $firstTable->inputItem(20);
    $secondTable= clone $firstTable;

    echo \"<br/>\".$firstTable->border ;

    echo \"<br/>\".$secondTable->border ;

    8- تجريد الكائن بوضع كلمة abstract قبل اسم الكائن يصبح هذا الكائن في هذه الحاله فئة مجرده بمعنى انه لا يمكن استدعاؤها بواسطة الكائن و يكون هذا الصنف في هذه الحالة غير صالحه في عمل الكائن و لكن تكون صالحه فقط للوريث مثال مأخوذ من موقع php.net
    abstract class AbstractClass
    {
    // Force Extending class to define this method
    abstract function getValue();
    abstract function prefixValue($prefix);

    // Common method
    function printOut() {
    print $this->getValue() . \"\\n\";
    }
    }

    class ConcreteClass1 extends AbstractClass
    {
    function getValue() {
    return \"ConcreteClass1\";
    }

    function prefixValue($prefix) {
    return \"{$prefix}ConcreteClass1\";
    }
    }

    class ConcreteClass2 extends AbstractClass
    {
    function getValue() {
    return \"ConcreteClass2\";
    }

    function prefixValue($prefix) {
    return \"{$prefix}ConcreteClass2\";
    }
    }

    $class1 = new ConcreteClass1;
    $class1->printOut();
    echo $class1->prefixValue(\'FOO_\') .\"\\n\";

    $class2 = new ConcreteClass2;
    $class2->printOut();
    echo $class2->prefixValue(\'FOO_\') .\"\\n\";
    لاحظ وجود كلمة abstract قبل اسم الكائن ووجدها ايضاً قبل اسماء الدوال الموجوده داخل الكائن الاول , و لا يمكن عمل دالة مجرده داخل كائن غير مجرد اي لا يمكن استخدام abstract قبل اسم اي دالة موجوده داخل اي كائن عادي 9- الكلمات ألمفتاحيه private, public, protected تستخدم هذه الكلمات قبل الخصائص و الدوال الموجوده داخل الكائن لجعلها ذو صفه معينه فالكلمة private : تجعل ما بعدها سري لا يمكن الوصول إليه من خارج الكائن و لا من الكائن الوريث يستخدم داخل الكائن فقط public : تجعل ما بعدها عام يمكن استخدمه في كل انحاء البرنامج و هو الوضع الافتراضي للدوال و الخصائص protected : تجعل ما بعدها سري لا يمكن استخدمه اللا داخل الكائن و الوصول إليه داخل الوريث مثال :
    class MyClass
    {
    privat $color = \"blue\";
    public $color2 = \"red\";
    protected $color3 = \"white\";

    }

    10- الثوابت بإمكانك ايضاً عمل ثوابت داخل الكائن مثلما تقوم بعمل متغيرات عن طريق الكلمه المقتاحيه
    const
    مثال
    class MyClass
    { const color=\"red\"; function __construct()
    { print self::color;
    } }
    11- نظره شامله علي الكائن
    البرمجه الكائنيه جعلت البرامجه بال php أكثر تنظيماً و اسهل تطورياً فيمكنك مثلاً
    عمل إذا ستقوم بعمل اسكربت لبنك تجاري فبإمكانك عمل كائن لحساب الارباح و كائن لعرض بيانات العملاء و كائن لإدخال بياناتهم
    و كائن لحساب فوائد القرود و كائن لعمل تحكم في بيانات العملاء و هكذا ثم ربطهم ببعض فيتكون لك برنامج كبير من حيث الرقي و منظم يمكن إصلاح أخطائه بسهوله لأنه منظم و مجزء و البرمجه الكائنيه تجعل النظام يتعامل مع كل كائن علي انه برنامج علي حدى و كذلك يمكنك استخدام احد كائنات الاسكربت في اسكربت أخر لإختصار الوقت و ايضاً يجب كتابة جملة الكائن في نفس المكائن الذي ستستدعي فيه الكائن أو عمله في ملف و من ثم جلبه عن طريق الداله
    include()
    مثلاً يمكنك ايضاً استدعاء الكائن بدون استخدام الجمله new عن طريق كتابة اسم الكائن و بعده :: و بعدها الخاصيه أو الوظيفه التي تريد استدعاؤها مثال :
    class MyClass
    { var $name=\"First object\"; }
    echo MyClass::name;

    نصائح قبل البدء في برمجة اسكربت معتمد علي الكائنات : قم بشكل نظري بتحديد ما تريده من كائنات في هذا النظام و من ثم تحديد مهمة كل كائن و سردها حتي لا يتعارض كائن مع الاخر في وظيفة ما و كذلك يجب ان يحتوي كل كائن
    علي وظائفه و اخواصه التي تجعله يقوم بمهمته بالشكل الأمثل و لكن لا يجب ان يحتوي علي وظائف زائده علي مهمة الاساسيه . 12- أمثله علي البرمجة الكائنيه
    سنقوم بإنشاء كائن يقوم بالاتصال بقاعدة البيانات أول شيئ يجب ان نحدد ما نريده من هذا الكائن 1- الاتصال بقاعدة البيانات
    2- الاستعلام من هذه القاعدة
    3- جلب البيانات منها في مصفوفه
    4- قطع الاتصال بقاعدة البيانات جيد ما هي الخصائص التي يجب ان تكون فيه 1- متغير يحتوي علي مقبض الاتصال بهذه القاعدة
    2- متغير يكون يحتوي علي الاستعلامات
    الان نقوم بتنفيذ هذا في الكائن
    <?
    class DBConnect
    { var $link=false;//مقبض الاتصال بقاعدة البيانات var $sql ; //مقبض الاستعلامات var $arr=array(); // متغير لجلب البيانات من قاعدة البيانات في مصفوفه function __construct($host,$user,$pass,$dbname) //الاتصال بقاعدة البيانات
    { $this->link= mysql_connect($host,$user,$pass); if(!$this->link) exit (\'لم يتم التمكن من الاتصال بالخادم\');
    else mysql_select_db($dbname); } function query(&$query) // الاستعلام من قاعدة البيانات
    {
    $this->sql= mysql_query($query,$this->link); return $this->sql; } function fetch_array($query)// جلب البيانات في مصفوفه
    {
    $this->sql=$query;
    $this->arr= mysql_fetch_array($this->sql);
    return $this->arr; } function __destruct() // تحرير الاستعلام و قطع الاتصال بقاعدة البيانات
    { if($this->sql) mysql_free_result($this->sql); if($this->link) mysql_close();
    } } ?>
    طريقة الاستخدام
    $db= new DBConnect(\'اسم الخادم\',\'اسم المستخدم\',\'كلمة المرور\',\'اسم قاعدة البيانات\'); $sql=$db->query(\"الاستعلام\"); $arr=$db->fetch_array($sql); unset($db);

    كاتب الموضوع : حازم علي
    كن أول من يقيم الموضوع
    12345