روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ کیان سلگی
اسکوپ ویژگی‌های هر کلاس
جامعه پی اچ پی ایجاد شده در ۳۰ آذر ۱۴۰۰

سلام وقت بخیر

در مورد محدوده و سطح دسترسی ویژگی‌های هر کلاس برای من یک ابهام به وجود اومده و ممنون میشم راهنمایی کنید

فرض کنیم 4 کلاس داریم به نام‌های a,b,c,d

کلاس a کلاس اصلی است و دارای سه ویژگی با سطح دسترسی public , private , protected

کلاس b فرزند کلاس a هست و خب طبیعتا میتونه داخل خود کلاس به تمام ویژگی‌های public , protected دسترسی داشته باشه و به ویژگی‌های public هم که با نمونه سازی به صورت مستقیم دسترسی داره.

داخل اموزش گفته شده که ویژگی با دسترسی public در تمامی کلاس‌ها قابل استفاده هست.

به عنوان مثال من داخل کلاس b که فرزند a هست یک ویژگی public تعریف کردم . آیا این ویژگی در کلاس a که کلاس پدر هست یا در کلاس c,d که هیچ ارتباطی با هم ندارند قابل فراحوانی هست یا خیر ؟ چون من امتحان کردم به ارور خوردم . اگر نیست پس تفاوت اون با protected چی هست؟

سلام و احترام

کلاس پدر دانشی نسبت به کلاس فرزند نداره،‌ ینی اینکه نمیدونه کلاس فرزند کیه، مثلا توی همین مثالی که شما آوردید کلاس a درباره کلاس b هیچی نمیدونه چون کلاس b اومده کلاس a رو ارث بری کرده ن a. حالا اگه کلاس b بیاد کلاس a رو ارث بری کنه این باعث میشه که کلاس b ویژگی هاو متدهای کلاس a رو داشته باشه و به متدها و پراپرتی‌های public و protected دسترسی داشته باشه.


در کلاس c و d هم باید یا کلاس a رو extends کنند تا بتونند از متدها و پراپرتی‌های کلاس a استفاده کنند که اگه ارث بری کنند میتونن از پراپرتی‌ها و متدهای public و protected استفاده کنند. یا میتوند از کلاس a داخل خودشون یه شی بسازند که در اون صورت به متدهای و پراپرتی‌های public دسترسی دارند

امیر صالحی ۳۰ آذر ۱۴۰۰، ۱۸:۱۹

خيلي ممنون از پاسخ شما

پس به طور كلي كلاس پدر نميتونه به ويژگي هاي public كلاس فرزند دسترسي داشته باشه مگر اينكه از اون شئ كلاس فرزند داخل كلاس پدر نمونه سازي بشه و داخل كلاس پدر ازش استفاده بشه.

منظور شما رو درست متوجه شدم؟

کیان سلگی ۰۱ دی ۱۴۰۰، ۰۵:۵۷

سلام.

درسته. شما آبجکتارو مثل فرزندان پدر در نظر بگیرید.

وقتی جزئیات یک فرزندو از پدرش میخواید، پدر نمیدونه کدوم فرزندش و همونطور که گفتین باید آبجکت فرزندو بهش بدید.(this در اینجا به خود پدر اشاره داره.)

این نمونه کد رو میتونید تست کنید:


class ParentClass {
    public $public = 1;
    protected $protected = 2;
    private $private = 3;
    
    function check() {
        echo $this->c_public . '
'
. PHP_EOL; // error         echo $this->c_protected . '
'
. PHP_EOL; // error         echo $this->c_private . '
'
. PHP_EOL; // error     }          function getChild(ParentClass $obj) {         echo $obj->c_public . '
'
. PHP_EOL; // 4         echo $obj->c_protected . '
'
. PHP_EOL; // 5         echo '*********' . PHP_EOL;         echo $obj->c_private . '
'
. PHP_EOL; // error     } } class ChildClass extends ParentClass {     public $c_public = 4;     protected $c_protected = 5;     private $c_private = 6;          function checkParentClass() {         echo $this->public . '
'
. PHP_EOL; // 1         echo $this->protected . '
'
. PHP_EOL; // 2         echo '*********' . PHP_EOL;         echo $this->private . '
'
. PHP_EOL; // error     } } (new ParentClass)->check(); // error $child = new ChildClass; //$child->checkParentClass(); //(new ParentClass)->getChild($child);

دو خط پایین کامنت هست، میتونید به ترتیب تستشون کنید.

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

خیلی ممنون

کیان سلگی ۰۲ دی ۱۴۰۰، ۱۱:۵۳