الدرس السادس - Object-Oriented PHP) Key OOP Concepts) | مايندز | علم ينتفع به
الأتصال بنا 61109-264-012

السبت، 4 يناير 2014

الدرس السادس - Object-Oriented PHP) Key OOP Concepts)

 Object-Oriented PHP الدرس السادس

Key OOP Concepts


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

مرحبا بكم في مدونة مايندز في الدرس السادس من اساسيات البرمجة الموجهة.
PHP تدعم ست نطاقات  public, private, protected, abstract, final, and static. عند إعلان أي دالة تكتب قبلها إحدى هذه الكلمات وفي حالة عدم كتابة أي واحدة منها يكون الافتراضي public

Public 
              وفي هذا الوضع يمكن الوصول للدالة في اي وقت من أي مكان. قبل اعلان الدالة كما
<?php
class Visitors{
    public function greetVisitor(){
        echo "Hello<br />";
    }
    function sayGoodbye(){
        echo "Goodbye<br />";
    }
}

Visitors::greetVisitor();
$visitor = new Visitors();
$visitor->sayGoodbye();
?>
result::
============
Hello
Goodbye
============


Private
      هنا الدالة تكون متاحة داخل الكلاس نفسه ولا يمكن استدعاءها من خلال الـ  object ولا من قبل الكلاسات الوارثه للكلاس المعلن فيه الدالة مثل هذه الدوال تستخدم كدوال مساعدة في الكلاس مثل دوال التحقق والاختبار لشروط محددة



private function validateCardNumber($number){
    if (!ereg('^([0-9]{4})-([0-9]{3})') )
        return FALSE;
    else 
        return TRUE;
}

Protected
         وهذا النوع النطاق يتيح إستخدام الدالة بنفس الطريقة السابقة بإضافة ميزة وهي إمكانية إستدعاء الدالة من الكلاس الوارث (الابن) للدالة من كلاس اخر (أب).
<?php
class verify{
    protected function verifyEIN($ein){
        return TRUE;
    }

}
class Employee extends verify{
private $ein;
    function __construct($ein){

        if ($this->verifyEIN($ein)) {
            echo "EIN verified. Finish";
        }
    }

}


$employee = new Employee("123-45-6789");
?>
سيكون الخرج كالتالي
EIN verified. Finish



Abstract
    تعلن الدالة في هذه الحالة في الكلاس (أب) فقط وتستخدم في كلاس (إبن) والكلاسات التي تعرف كـ abstract هي فقط التي يمكن ان تحتوي على دوال تعرف كـ abstract methodes ويكون شكلها كالتالي 
abstract function methodName();
يمكن استخدام الـabstrtact  عندعمل كلاس يكون اساسي يخدم عدة كلاسات أخرى تشترك في نفس الدالة.
كلاس الموظف فيه المديرين والعمال والمهندسين وغيرهم لذلك يمكن ان يخدم هذا النوع بشكل جيد
abstract class Employee{

    abstract function hire();
    abstract function fire();
    abstract function promote();
    abstract demote();
}


Final
    تعريف الدالة بهذا النطاق يمنع الكلاسات الفرعية (الابناء) من الكتابة على الخاصية  overridden يعني لا يمكن ان تعلن أخرى بنفس الاسم في الكلاسات الفرعية
.
class Employee{
    final function getName() {
        ...
    }
}


أما بالنسبة للـ static   فسنتحدث عنها لاحقا بشكل مفصل


Type Hinting
هي خاصية في PHP 5 تعمل على التأكد من القيم التي تمرر للدوال كبراميترات مثلا :

<?php
class verify{
    protected function verifyEIN($ein){
        return TRUE;
    }

}
class Employee extends verify{
private $ein;
    function __construct($ein){

        if ($this->verifyEIN($ein)) {
            echo "EIN verified. Finish";
        }
    }
   
    public function xx(verify $a){
        var_dump($a);
    }
}
$employee = new Employee("123-45-6789");
$employee->xx('dd');
?>

الدالة xx(); نمرر لها المتغير $a والذي  object من نوع  verify  فعند تمرير  نص للدالة عند استدعائها يعطي خطأ لأن المتغير له مواصفات حددناها مسبقا فإذا حدث أي إختلاف في الكلاس او النسخة من الكلاس الذي نعين على اساسه البراميتر يعطيك المترجم خطأ كالأتي:
Catchable fatal error: Argument 1 passed to Employee::xx() must be an instance of verify, string given, called in C:\AppServ\www\test.php on line 26 and defined in C:\AppServ\www\test.php on line 17

يمكن ايضاً تقييد البراميتر بنصي او رقمي او غير ذلك
function aa(int $x);
function aa(string $x);
function aa(bool $x);
function aa(float $x);
....

إلى هذه النقطة نكون قد وصلنا إلى نهاية درس اليوم موعدنا يوم السبت والثلاثاء من كل الاسبوع ان شاء الله

0 comments :

إرسال تعليق