fbpx

تعلم لغة php – الدرس التاسع الكائن Objects



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

في البرمجة الموجهة للكائنات ، الكلاس هي تعريف لكائن ، في حين أن object هو مثيل لكائن ، مما يعني أنه من الكلاس واحدة يمكنك إنشاء العديد من الكائنات.

000000على سبيل المثال ، دعنا نحدد الكلاس طالب.

class Student {
// البناء
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    public function say_name() {
        echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
    }
}

$Hicham= new Student("Hicham", "Ahmad");
$Hicham->say_name();

دعونا نحلل الكود. لاحظ أن Student كلاس يحتوي على دالة مُنشئ ، والتي يتم تنفيذها عند إنشاء الكائن. يتلقى المُنشئ الحجج التي يتم توفيرها لاحقًا عند إنشاء الكائن باستخدام الكلمة الأساسية new.

بعد أن قمنا ببناء الكائن في المتغير $ Hicham ، يمكننا الآن استخدام أساليب الكائن.

قمنا بتطبيق أسلوب الكائن say_name ، الذي يطبع اسم الطالب. لاحظ أن الدالة say_name لا تتلقى أي وسيطات ، ولكن لديها حق الوصول إلى الاسم الأول والأخير للطالب ، لأنه تم تعريفها مسبقًا في المُنشئ.

فيما يلي بعض التعريفات الهامة المتعلقة بالكائنات:

Classes تحدد كيف تتصرف الكائنات. لا تحتوي الفصول على بيانات.
Objects هي أمثلة من الفئات التي تحتوي على بيانات.
Members هم متغيرات تنتمي إلى كائن.
Methods هي وظائف تنتمي إلى كائن ، ولها حق الوصول إلى أعضائها.
Constructor هو طريقة خاصة يتم تنفيذها عند إنشاء كائن.

الوراثة

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

class Student {
    // البناء
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    public function say_name() {
        echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
    }
}

$Hicham= new Student("Hicham", "Ahmad");
$Hicham->say_name();

class MathStudent extends Student {
    function sum_numbers($first_number, $second_number) {
        $sum = $first_number + $second_number;
        echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
    }
}

$Hicham= new MathStudent("Hicham", "Chang");
$Hicham->say_name();
$Hicham->sum_numbers(3, 5);

لاحظ أن الكائن Hicham له أيضًا نفس المُنشئ والدالة say_name ، بالإضافة إلى طريقة جديدة تسمى sum_numbers ، والتي تتسبب في قيام Hicham بحساب مجموع رقمين. لاحظ أيضًا أن الوظيفة الجديدة يمكنها الوصول إلى نفس الأعضاء الذين سبق تحديدهم في الكلاس الطالب (first_name ، last_name).

Public و private functions

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

class Student {
// يجب أن يكون المنشئ عامًا
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

// للإستخدام الخارجي
    public function say_name() {
        echo "My name is " . $this->full_name() . "\n";
    }

// للاستخدام الداخلي
    private function full_name() {
        return $this->first_name . " " . $this->last_name;
    }
}

$Hicham= new Student("Hicham", "Ahmad");

$Hicham->say_name();

// هذا لن يعمل
// echo $ Hicham-> full_name () ،

تمرين

قم بإنشاء الكلاس تسمى Car مع منشئ يتلقى العلامة التجارية ويصنع عام السيارة ، ووظيفة تسمى print_details تطبع تفاصيل السيارة.

على سبيل المثال ، بالنسبة لسيارة Toyota 2006 ، سيتم طباعة السطر التالي:

هذه السيارة 2006 Toyota.

<?php
// TODO: تنفيذ الكلاس السيارات هنا

$car = new Car("Toyota", 2006);
$car->print_details();

الحل

<?php
class Car {
    public function __construct($brand, $year) {
        $this->brand = $brand;
        $this->year = $year;
    }

    public function print_details() {
        echo "This car is a " . $this->year . " " . $this->brand . ".\n";
    }
}

$car = new Car("Toyota", 2006);
$car->print_details();

سنحصل على النتيجة التالية عند التشغيل

This car is a 2006 Toyota.

الدرس العاشر






Leave a Reply