روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۸ Mahdi
Autoloading
جامعه پی اچ پی ایجاد شده در ۰۷ شهریور ۱۴۰۱

سلام در مورد اصل inheritance

ارتباط بین کلاس پدر و فرزند به چه شکلی است وقتی که ما فایل پدر را در فایل بچه‌ها include نکردیم ؟

در بحث autoloading ما اگر شی پدر را هم نسازیم و فقط object فرزندان را بسازیم باز هم به متودهای پدر دسترسی خواهیم داشت در صورتی ک هیچ

ارتباطی بین فایل‌های ان‌ها وجود ندارد

سلام دوست عزیز

autoloading از طریق namespace میاد و با استاندارد PSR-4 کلاس‌ها رو پیدا میکنه و مشکل وابستگی رو برطرف میکنه

موفق باشید ?

محمد گازری ۰۷ شهریور ۱۴۰۱، ۱۰:۵۴

استاد مشکل اینجاست که namespace ایی تعریف نکردیم برای کلاس ها

Mahdi ۰۷ شهریور ۱۴۰۱، ۱۱:۱۴

در کدوم قسمت؟

محمد گازری ۰۷ شهریور ۱۴۰۱، ۱۱:۴۸

قبل از دقیقه 30 ویدیو

کلاس‌های پدر و فرزند در فایل‌های جداگانه ایجاد شد و در فایل main اشیا را ایجاد کرده و از طریق اتولودینگ فراخوان شدن

کلاس‌های فرزند تمام متودهای کلاس پدر رو به ارث بردن بدون هیچ ارتباطی با پدر

هیچ namespace هم برای فایل‌ها تعریف نکردیم

به هیچ مشکلی هم برنخوردیم

حتما object پدر هم نساختم ولی تونستم از متدهاش با ساخت object فرزند استفاده کنم


هر کدوم از این کلاس‌ها در فایل جداگانه نوشته شده

class person
{
    private $name;
    public function __construct()
    {
        echo $this->name = static::class ."-". rand(99, 999);
    }
    public function printName()
    {
        echo $this->name.PHP_EOL;
    }
}

فایل student

class student extends person{}

فایل teacher

class teacher extends person{}

فایل اتولودر

function autoLoader($class)
{
    $classFile = __DIR__."/class/$class.php";
    if (file_exists($classFile) && is_readable($classFile)) {
        include $classFile;
    }else{
        die("$classFile.not found\\n");
    }
}
spl_autoload_register('autoLoader');

فایل main

include '0.autoLoader.php';
$s = new teacher();
$s->printName();
$t = new student();
$t->printName();
// teacher-139
// student-141


بدون استفاده از namespace

Mahdi ۰۷ شهریور ۱۴۰۱، ۱۲:۰۲

خب در دقیقه ۳۰ و خط ۷ ما اومدیم namespace رو دادیم به کلاس برای صدا زدن و autoloader هم چون بر حسب فایل و اسم پوشه کار میکنه تونست اون رو پیدا کنه

محمد گازری ۰۷ شهریور ۱۴۰۱، ۱۲:۲۱

استاد سوال من مربوط به قبل از namespace‌ها هست

طبق کد‌های بالا باید ما به مشکل بخوریم در ارتباط بین کلاس پدر و فرزند ولی به مشکل نمیخوریم

Mahdi ۰۷ شهریور ۱۴۰۱، ۱۲:۲۴

محمدرضا جان در این ویدیو فقط یه معرفی و آشنایی با autoloading داشتیم و در پروژه‌های واقعا فرایند autoloading عموما با کامپوزر و PSR-4 هندل میشه

مثال زیر رو هم میتونی ببینی

https://github.com/laravel/laravel/blob/9.x/composer.json#L23

موفق باشید ?

بهترین پاسخ
محمد گازری ۰۷ شهریور ۱۴۰۱، ۱۲:۳۸

تشکر استاد?

Mahdi ۰۷ شهریور ۱۴۰۱، ۱۲:۴۲