لطفا جاواسکریپت مرورگر خود را فعال سازید!

نحوه فعال سازی در کروم
  1. ابتدا باید اینکارو بگنید
  2. بعدش اونکارو
نحوه فعال سازی در فایرفاکس
  1. ابتدا باید اینکارو بگنید
  2. بعدش اونکارو
وراثت در زبان PHP به زبان آدمیزاد

وراثت در زبان PHP به زبان آدمیزاد

نیاز به توضیح نیست که مبتکرین برنامه نویسی شیئ گرا از اشیاء دنیای واقعی برای چنین رویکرد برنامه نویسی الهام گرفته اند. به عبارت دیگر، همان‌طور که ما در دنیای واقعی با اشیاء سر و کار داریم، زمانی که پروژه ای را با اصول OOP می نویسیم نیز با Object ها یا همان اشیاء درگیر هستیم. یکی دیگر از ویژگی‌هایی که مبتکرین شیئ گرایی از جهان واقع الهام گرفته‌اند مفهوم Inheritance یا «وراثت» است. همه ما برخی از خصوصیاتمان را از پدر، پدر بزرگ، دایی و … به ارث می‌بریم و آن خصیصه ها به عنوان بخشی از ذات ما می‌شوند (مثلاً اگر دایی شما تاس باشد، به احتمال زیاد شما هم در آینده‌ای نه چندان دور تاس خواهید شد!) در برنامه نویسی شیئ گرا نیز چیزی تحت عنوان وراثت داریم. حال برای آن که به خوبی با مفهوم وراثت در برنامه نویسی به‌خصوص زبان برنامه نویسی پی اچ پی آشنا شویم، سعی می‌کنیم یک مثال در دنیای واقعی را به یک پروژه کوچک تبدیل کنیم. در ادامه با سکان آکادمی همراه باشید تا متوجه ارتباط عکس سگ و گربه و برنامه نویسی شوید!

حیوانات دارای یکسری خصوصیات هستند که مابین ایشان مشترک است مثل خوردن، خوابیدن، جیش کردن و … اما این در حالی است که برخی حیوانات از خصوصیاتی برخوردارند که سایر حیوان ها فاقد آن‌ها هستند مثلاً مار می‌تواند نیش بزند اما گنجشک از چنین توانایی برخوردار نیست. در زبان انگلیسی زمانی که بخواهیم حیوانات را به صورت کلی در نظر بگیریم، می‌توانیم واژه Animal را مورد استفاده قرار دهیم. از این رو، فایلی ایجاد می‌کنیم تحت عنوان animal.php و داخل این فایل کلاسی تعریف می‌کنیم تحت عنوان Animal:


class Animal 
{
    public $name;
    function __construct($input) 
    {
        $this->name = $input;
    }

    public function eat() {
        echo "$this->name is eating";
    }
    
    public function sleep() {
        echo "$this->name is sleeping";
    }
}

در ادامه قصد داریم تا یک پراپرتی کلی برای کلاسمان تعریف کنیم پس متغیری تحت عنوان name را به این کلاس اختصاص می دهیم. حال می‌خواهیم از یک کانستراکتور در کلاس خود استفاده کنیم تا به محض این که شیئی از روی این کلاس ساخته شد دستورات داخل آن اجرا شوند. در تفسیر کدهای فوق بایستی گفت که به محض ساخت یک شیئ از روی کلاس Animal، متد کانستراکتور به صورت خودکار اجرا می شود و پارامتر ورودی اش را به متغیر name پاس می دهد. در ادامه دو متد تعریف کرده ایم تحت عناوین eat و sleep که به ترتیب «خوردن» و «خوابیدن» معنی می دهند و کاری این متدها انجام می دهند این است که پارامتر ورودی متد کانستراکتور را به عبارات is eating و is sleeping ضمیمه کرده و در معرض دید کاربر قرار می دهد. در این مرحله از کار، کدهای مرتبط با کلاس Animal به پایان می رسند. لازم به ذکر است که ویژگی هایی که در این کلاس تعریف کردیم مابین تمامی حیوانات مشترک اند. حال قصد داریم تا کلاسی اختصاصی برای گربه ایجاد کنیم که نه تنها دارای خصوصیات مخصوص به خود است بلکه کلیه خصوصیات کلاس حیوان را نیز اصطلاحا به ارث برده است:


class Animal 
{     
    public $name;     
    function __construct($input) 
    {         
        $this->name = $input;
    }

    public function eat() {
        echo "$this->name is eating";
    }

    public function sleep() {
        echo "$this->name is sleeping";
    }
}

class Cat extends Animal
{
    public function meow() 
    {
        echo "$this->name is meowing";
    }
}

همان طور که در کد فوق ملاحظه می شود، کلاسی جدید تحت عنوان Cat ایجاد کرده ایم و از آنجا که می خواهیم این کلاس کلیه خصوصیات کلاس حیوان را به ارث ببرد، از کلیدواژه ای تحت عنوان extends استفاده کرده سپس نام کلاسی که می خواهیم از آن ارث بری کنیم را نوشته ایم که در این مثال Animal است. از این پس، کلاس گربه دارای کلیه خصوصیات کلاس حیوان است که از آن جمله می توان به خوردن و خوابیدن اشاره کرد. علاوه بر این، کلاس گربه دارای یک ویژگی منحصر به خود نیز هم هست که میومیو کردن است. به عبارت دیگر، داخل کلاس Cat متدی تعریف کرده ایم تحت عنوان meow که پراپرتی name را به عبارت is meowing ضمیمه کرده و در معرض دید کاربر قرار می دهد. به همین صورت کلاس دیگری تحت عنوان Dog ایجاد کرده که از کلاس Animal ارث بری می کند و به علاوه نیز دارای یکسری ویژگی های منحصر به فرد همچون واق واق کردن می باشد:


class Animal 
{     
    public $name;     
    function __construct($input) 
    {         
        $this->name = $input;
    }

    public function eat() 
    {
        echo "$this->name is eating";
    }
    
    public function sleep() 
    {
        echo "$this->name is sleeping";
    }
}

class Cat extends Animal
{
    public function meow() 
    {
        echo "$this->name is meowing";
    }
}

class Dog extends Animal
{
    public function bark() 
    {
        echo "$this->name is barking";
    }
}

همان طور که در کد فوق ملاحظه می شود، متدی تحت عنوان bark به معنی واق واق کردن ایجاد کرده و پراپرتی name را به عنوان خروجی این متد به علاوه عبارت is barking در نظر گرفته ایم. برای این که خیلی پروژه ما پیچیده نشود، قصد داریم تا اشیاء مد نظر خود داخل همین کلاس تعریف کنیم. لذا ابتدا یک شیئ از روی کلاس گربه ایجاد کرده و متدهای آن را فرا می خوانیم:


class Animal 
{     
    public $name;     
    function __construct($input) 
    {         
        $this->name = $input;
    }

    public function eat() 
    {
        echo "$this->name is eating";
    }

    public function sleep() 
    {
        echo "$this->name is sleeping";
    }
}

class Cat extends Animal
{
    public function meow() 
    {
    echo "$this->name is meowing";
    }
}

class Dog extends Animal
{
    public function bark() 
    {
        echo "$this->name is barking";
    }
}

$cat = new Cat('Makhmali');
$cat->eat();
echo '<br>';
$cat->sleep();
echo '<br>';
$cat->meow();

همان طور که در کد فوق ملاحظه می شود، یک شیئ تحت عنوان cat از روی کلاس Cat ساخته ایم و از آنجا که کانستراکتور کلاس Animal نیاز به یک پارامتر ورودی به عنوان نام دارد، نامی همچون مخملی را برای گربه خود در نظر گرفته ایم. اینجا است که مفهوم واقعی وراثت در برنامه نویسی را درک خواهیم کرد. همان طور که در کد فوق ملاحظه می شود، داخل کلاس Cat ما به جزء متدی تحت عنوان meow هیچ گونه متد دیگری نداریم اما این در حالی است که متدهایی همچون eat و sleep را در شیئ ساخته شده از روی این کلاس فراخوانده ایم. علت این که ما اجازه چنین کاری را داریم این است که کلاس گربه کلیه خصوصیات کلاس حیوان را به ارث برده است لذا هر خصوصیتی که کلاس Animal داشته باشد، کلاس Cat نیز آن ها را به ارث خواهد برد. به همین منوال، می توان از روی کلاس سگ نیز یک شیئ ساخت:


class Animal 
{     
    public $name;     
    function __construct($input) 
    {         
        $this->name = $input;
    }

    public function eat() 
    {
        echo "$this->name is eating";
    }

    public function sleep() 
    {
        echo "$this->name is sleeping";
    }
}

class Cat extends Animal
{
    public function meow() 
    {
        echo "$this->name is meowing";
    }
}

class Dog extends Animal
{
    public function bark() 
    {
        echo "$this->name is barking";
    }
}

$cat = new Cat('Makhmali');
$cat->eat();
echo '<br>';
$cat->sleep();
echo '<br>';
$cat->meow();
echo '<br>';
echo '<br>';
$dog = new Dog('Barfi');
$dog->eat();
echo '<br>';
$dog->sleep();
echo '<br>';
$dog->bark();

می بینیم که شیئی از روی کلاس سگ ساخته ایم تحت عنوان dog و به عنوان پارامتر ورودی نامی همچون برفی را برای آن در نظر گرفته ایم و این در حالی است که این کلاس هم همچون کلاس گربه کلیه خصوصیات کلاس حیوان را به ارث برده و به علاوه دارای متد دیگری تحت عنوان bark به معنی «واق واق کردن» است. توجه داشته باشیم که شیئ dog صرفا به متدهای کلاس Animal و Dog دسترسی دارد و در صورتی که متد meow که به کلاس Cat اختصاص دارد را به آن پاس دهیم با ارور مواجه خواهیم شد:

وراثت در زبان برنامه نویسی پی اچ پی



بهزاد مرادی