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


در آموزش آشنایی با مفهوم OOP و بررسی اصول چهارگانهٔ شیئ‌گرایی، گفتیم که یکی از پایه‌های شیئ‌گرایی مبحثی است تحت عنوان Inheritance که می‌توان معادلی همچون «وراثت» برای آن در نظر گرفت. به طور خلاصه می‌توان گفت که در متودولوژی اواوپی، وراثت این امکان را در اختیار توسعه‌دهندگان می‌گذارد تا بتوانند ویژگی‌های کلاسی خاص را در دیگر کلاس‌ها وارد سازند.

به منظور درک بهتر این موضوع، داخل پوشهٔ oop پروژه‌ای با نامی دلخواه تحت عنوان inheritance ساخته و فولدر اِستراکچری که در ابتدای این دورهٔ آموزشی ایجاد کردیم را در آن می‌سازیم. سپس وارد پوشهٔ classes شده و فایل User.php را به صورت زیر تکمیل می‌کنیم:

<?php
namespace SokanAcademy;

class User
{
    public $firstname;
    public $lastname;
    public $role = 'basic';
    public $hasFullPermission = false;

    public function __construct($firstname, $lastname, $role = null, $hasFullPermission = null)
    {
        $this->firstname = $firstname;
        $this->lastname = $lastname;
        if ($role) {
            $this->role = $role;
        }
        if ($hasFullPermission) {
            $this->hasFullPermission = $hasFullPermission;
        }
    }

    public function isAdmin()
    {
        if ($this->role == 'admin') {
            return "This user is an Administrator";
        }
    }

    public function showFullName()
    {
        return $this->firstname . ' ' . $this->lastname;
    }
}

در بدنهٔ این کلاس چهار پراپرتی تعریف کرده‌ایم که از میان آن‌ها پراپرتی‌های role$ و hasFullPermission$ دارای مقادیری پیش‌فرض هستند. سپس کانستراکتور را موظف کرده‌ایم که در پروسهٔ ساخت یک آبجکت جدید از روی کلاس User، دو پارامتر ورودی اجباری و دو پارامتر ورودی اختیاری از کاربر بگیرد؛ به عبارت بهتر، پارامترهای ورودی firstname$ و lastname$ که دارای مقدار اولیهٔ null نیستند الزامی بوده و در حین استفاده از این کلاس حتماً‌ می‌باید در نظر گرفته شوند اما پارامترهای role$ و hasFullPermission$ دارای مقدار اولیهٔ null هستند بدین معنا که اگر در حین استفاده از این کلاس آن‌ها را سِت نکنیم، مقدار null به آن‌ها اختصاص خواهد یافت و در غیر این صورت، مقادیر جدید جایگزین خواهند شد.

همچنین داخل بدنهٔ کانستراکتور دستور داده‌ایم تا مقادیر پارامترهای ورودی به پراپرتی‌های متناظرشان منتسب گردد به علاوه این که با استفاده از دو دستور شرطی چک کرده‌ایم ببینیم که آیا پراپرتی‌های role$ و hasFullPermission$ به اصطلاح سِت شده‌اند (یا به عبارتی مقداری به غیر از null دارند) یا خیر که اگر این گونه بود، مقادیر آن‌ها را نیز به پراپرتی‌های مربوطه منتسب خواهیم نمود.

در ادامه، فانکشن یا بهتر بگوییم متدی نوشته‌ایم تحت عنوان ()isAdmin و داخل آن چک کرده‌ایم ببینیم که آیا مقدار پراپرتی role$ برابر با استرینگ admin می‌باشد یا خیر که اگر این طور بود، استرینگی مبنی بر ادمین بودن کاربر را ریترن خواهیم نمود. همچنین متد دیگری به نام ()showFullName نوشته و داخل آن پراپرتی‌های firstname$ و lastname$ را با یکدیگر کانکت نموده و نتیجهٔ نهایی را ریترن کرده‌ایم. حال جهت تست، وارد فایل index.php شده و آن را به صورت زیر تکمیل می‌نماییم:

<?php
ini_set('display_errors', '1');
require_once 'vendor/autoload.php';

$user = new SokanAcademy\User();

تنها کاری که انجام داده‌‌ایم این است که آبجکتی تحت عنوان user$ از روی کلاس User ساخته‌ایم و چنانچه این فایل را اجرا کنیم، در خروجی خواهیم داشت:

/var/www/oop/inheritance$ php index.php 
PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function SokanAcademy\User::__construct(), 0 passed in /var/www/oop/inheritance/index.php on line 5 and at least 2 expected in /var/www/oop/inheritance/classes/User.php:11

این ارور به درستی اشاره می‌کند که کلاس User حداقل به دو پارامتر الزامی نیاز دارد اما این در حالی است که ما در حین ساخت آبجکت هیچ گونه پارامتری را به آن پاس نداده‌ایم که برای رفع این ارور، کد فوق را به صورت زیر تصحیح می‌نماییم:

<?php
ini_set('display_errors', '1');
require_once 'vendor/autoload.php';

$user = new SokanAcademy\User('Behzad', 'Moradi');

در واقع، با در نظر گرفتن دو پارامتر اول که اجباری بودند، ارور فوق نیز مرتفع خواهد شد. حال در خط بعد کد زیر را وارد می‌کنیم:

echo $user->isAdmin();

اما در خروجی هیچ چیزی ملاحظه نخواهد شد چرا که داخل این متد دستور داده‌ایم که چنانچه پراپرتی role$ برابر با استرینگ admin بود چیزی را ریترن کند و در غیر این صورت هیچ کار خاصی انجام ندهد.

در این مرحله از آموزش، نیاز داریم تا به مبحث وراثت ورود پیدا کنیم که برای این منظور، فایلی با نامی دلخواه همچون Administrator.php داخل پوشهٔ classes می‌سازیم و کاری می‌کنیم تا کلیهٔ خصوصیاتش را از کلاس User به ارث ببرد.

این بخش از محتوا مخصوص کاربرانی است که ثبت‌نام کرده‌اند.
جهت مشاهدهٔ این بخش از محتوا لاگین نمایید.

جمع‌بندی
در این آموزش به بررسی یکی از پایه‌های کلیدی OOP تحت عنوان Inheritance پرداختیم که این امکان را در اختیار توسعه‌دهندگان زبان برنامه‌نویسی پی‌اچ‌پی می‌گذارد تا از دوباره‌کاری و نوشتن کدهای تکراری جلوگیری کنند و این فیچر چیزی است که در تمامی فریمورک‌ها و لایبرری‌های مطرح این زبان به کار گرفته می‌شود.

دانلود فایل‌های تمرین

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان