EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

اشیا و کلاس ها در php

PHP یک زبان شیئ محور (OOP: Object Oriented Programming) است. در برنامه نویسی شی محور، یک کلاس (class) تعریفی از شیء و یک شیئ (object) نمونه ای از کلاس است. بدین معنی که از یک کلاس می توانید چندین شیء بسازید. در این درس با موستانگ همراه شوید تا نحوه تعریف و استفاده از اشیا و کلاس ها در php را با هم بیاموزیم.

 اشیا و کلاس ها در زبان برنامه نویسی php - موستانگ
اشیا و کلاس ها در زبان برنامه نویسی php – موستانگ

 

اشیا و کلاس ها در php

بطور مثال، فرض کنید یک کلاس “دانش آموز” بسازیم:

class Student {
    // constructor
    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";
    }
}

$alex = new Student("Alex", "Jones");
$alex->say_name();

بیایید کد را بررسی کنیم. توجه کنید که کلاس Student دارای یک تابع سازنده (constructor) است که هنگام ساخت شیئ اجرا می شود. هنگام ساختن شیئ با استفاده از دستور new، آرگومان هایی را به تابع سازنده می دهیم.

پس از اینکه یک شی ساختیم و آن را به متغیر alex$ دادیم، اکنون می توانیم از توابع آن استفاده کنیم.

همان طور که در کد بالا مشاهده کردید، ما تابعی به نام say_name تعریف کردیم که نام دانش آموز را چاپ می کند. توجه کنید که تابع say_name هیچ آرگومانی دریافت نمی کند اما به متغیرهای first_name$  و last_name$ دانش آموز دسترسی دارد. زیرا این متغیرها قبلاً در تابع سازنده تعریف شده اند.

در زیر مهمترین تعاریف مربوط به اشیا را مشاهده می کنید:

  • Classes: تعریف کننده نحوه رفتار اشیا هستند و داده ای را نگهداری نمی کنند.
  • Objects: نمونه ای از کلاس ها هستند و داده ها را نگهداری می کنند.
  • Members: متغیرهایی هستند که متعلق به یک شیئ هستند.
  • Methods: توابعی هستند که متعلق به یک شیئ هستند و به متغیرهای کلاس دسترسی دارند.
  • Constructor: یا تابع سازنده، یک تابع ویژه است که هنگام ساخت یک شیئ، اجرا می شود.

 

وراثت

مهمترین ویژگی یک برنامه نویسی شیئ محور، وراثت است. این ویژگی این امکان را به ما می دهد که از کدی که قبلا نوشتیم، دوباره استفاده کنیم و آن را گسترش بدهیم. فرض کنید می خواهیم تا یک دانش آموزِ ریاضی تعریف کنیم که این را نیز بداند که چطور دو عدد را با هم جمع کند:

class Student {
    // constructor
    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";
    }
}

$alex = new Student("Alex", "Jones");
$alex->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;
    }
}

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

دقت کنید که شیئ Eric، همان تابع سازنده و تابع say_name قبل را داراست و علاوه بر این دو، یک تابع جدید بنام sum_numbers نیز دارد که این امکان را به Eric می دهد تا جمع دو عدد را حساب کند. همچنین توجه کنید که این تابع جدید نیز به متغیرهای کلاس دسترسی دارد ( last_name و first_name).

 

توابع public و private

با استفاده از این دو کلیدواژه، می توانیم به ترتیب توابعی را تعریف کنیم که از خارج و داخل یک شیئ قابل دسترسی باشند. این ویژگی کمک می کند تا بهتر نحوه استفاده از اشیا را تعریف کنیم. زیرا بین توابعی که در داخل استفاده می شوند و توابعی که در خارج استفاده می شوند، تفاوت می گذارد.

class Student {
    // constructor should be public
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    // for external use
    public function say_name() {
        echo "My name is " . $this->full_name() . "\n";
    }

    // for internal use
    private function full_name() {
        return $this->first_name . " " . $this->last_name;
    }
}

$alex = new Student("Alex", "Jones");

$alex->say_name();

// this will not work
// echo $alex->full_name();

در مثال بالا، تابع say_name بصورت public و تابع full_name بصورت private تعریف شده است. بنابرین، فراخوانی ()alex->say_name$ انجام می شود ولی فراخوانی ()alex->full_name$ اجرا نمی شود.

 

تمرین ( اشیا و کلاس ها در php )

کلاسی بنام Car بسازید که تابع سازنده ای داشته باشد که برند و سال ساخت ماشین را دریافت کند و همچنین یک تابع بنام print_details که مشخصات ماشین را چاپ کند. بطور مثال برای یک ماشین تویوتا ساخت 2016 باید خط زیر چاپ شود:

This car is a 2016 Toyota.

 

در نهایت

[[*] در این درس، با مفهوم اشیا و کلاس ها در php آشنا شدیم و نحوه تعریف و کار با آن ها را آموختیم. در درس بعدی با موستانگ همراه باشید تا با مفهوم دیگری در php یعنی Exception آشنا شویم. برای تمرین کدنویسی ، همیشه می توانید از قسمت مانژ استفاده کرده و سوالات برنامه نویسی خود را در آنجا با ما مطرح کنید.

[*] پاسخ تمرین و سوالات و نظرات خود درباره این درس را می توانید در پایین این نوشته و در قسمت دیدگاه ها ثبت کنید. نظرات شما برای موستانگ ارزشمند است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *