۳ احسان پژمان
تفاوت constructor در ورژن ها
جامعه پی اچ پی ایجاد شده در ۰۳ دی ۱۴۰۱

با سلام وقتتون بخیر استاد محترم

اینجا در واقع چیزی که من متوجه شدم اینه که در ورژن‌های قبل آنچه که در ورودی constructor قرار بدیم رو باید توی کلاس به صورت پابلیک قبلش تعریف کرده باشم یا به نوع دیگه ای هم میشه تعریف کرد یعنی پرایویت و protected ؟ که قاعدتا چون constructor داخل خود کلاس هستش ممکنه بشه اما وقتی خارج از کلاس استفاده کنیم ممکنه به مشکل بخوریم ؟

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

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

سلام احسان عزیز

در ورژن 8 ما میتونیم پراپرتی‌ها رو توی کانستراکتور هم ایجاد کنیم و تایپش هم هر نوعی میتونه باشه.

حالا جواب سوال هات:

۱.هر تایپی میشه و بستگی به استفادتون داره

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

۲.بله باید در کانستراکتور تایپ رو مشخص کنید.

احمدرضا فاطمی کیا ۰۳ دی ۱۴۰۱، ۱۵:۳۸

با درود استاد محترم

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

class A
{
    public function __construct(
        int $number,
        string $name,
        bool $default
    )
    {
        
    }
}

و باید به این شکل باشه ؟

class A
{
    public function __construct(
        public int $number,
       private string $name,
       protected bool $default
    )
    {
        
    }
}
احسان پژمان ۰۳ دی ۱۴۰۱، ۱۵:۴۵

احسان جان

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

در کد دوم شما اومدی پراپرتی ایجاد کردی و دیگه فقط یک ورودی نیستند.(هم ورودی و هم تعریف و مقدار دهی پراپرتی ها)

این لینک رو ببین:

https://php.watch/versions/8.0/constructor-property-promotion


بهترین پاسخ
احمدرضا فاطمی کیا ۰۳ دی ۱۴۰۱، ۱۵:۴۹