۵ mohammad dadkhah
متود insteadof
جامعه پی اچ پی ایجاد شده در ۰۲ اردیبهشت ۱۴۰۱

سلام

تایم 53.23 استاد یک مثال می‌زنند در مورد توابع هم نام در دو trait مجزا

use Game,Music { Music::play insteadof Game; }

بنده این سینتکس را متوجه نمی‌شوم

{ Music::play insteadof Game; }

یعنی چی از یک طرف میگه که متود play ای که از Music است بعد insteadof می‌آیید

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

فرض کنید متد play در هر ۲ trait هست و ما با این ساختار به مفسر میگیم متد play از کدوم trait برداشته بشه در اینجا میشه Game

به این شکل جلوی تداخل گرفته میشه

محمد گازری ۰۲ اردیبهشت ۱۴۰۱، ۱۱:۱۸

پس چرا میگیم

Music::play

خب از اول گفته شود برو

play insteadof Game

متودplay این trait Game را بردار

منظورم را متوجه میشوید

میگم که این قسمت

Music::

در سینتکس چه معنایی دارد؟

mohammad dadkhah ۰۲ اردیبهشت ۱۴۰۱، ۱۱:۲۵

خب داریم به مفسر میگیم که کدوم کلاس و کدوم متد لاید آبجکتی از متد دیگر باشه

دلیلش هم اینه که شما الان اینجا ۲ تا trait دارید فرض کنید چند trait در اینجا هست و چند trait دیگر هم میتونه در کلاس‌های پدر باشه که اصلا متد play رو ندارن

در اینجا ما مستقیفا به مفسر کلاس مبدا و مقصد رو میدیم

محمد گازری ۰۲ اردیبهشت ۱۴۰۱، ۱۱:۲۸

این مبدا یا مقصد یعنی چی؟

مگه ما هدف مان این نیست که بگیم متودی که در این trailاست منظور ما است تا از مانع تداخل بشیم

یا به عبارت دیگه میشه از بیان شما این منظور را برداشت کرد که به مفسر بگیم این تابع تنها در دو trait وجود دارد و شما برو سراق این trait

mohammad dadkhah ۰۲ اردیبهشت ۱۴۰۱، ۱۱:۳۴

خیر ببینید مثلا ما میتونیم بگیم متد سلام از کلاس persian باید نوعی از متد hello از کلاس english باشه و صرفا اینها هم اسم نیستن، برای همین باید سیسنتکس کامل آورده بشه که مفسر متوجه این موضوع بشه (جدای بحث conflict در اینجا گفتم)

یه نکته رو هم اضافه کنم که بحث شی گرایی در بیشتر موارد نیاز به تمرین و کد نویسی داره برای درکش و صرفا مطالعه مفاهیم میتونه گیج کننده باشه، برای همین شما سعی کنبد مفاهیم رو تا حد امکان متوجه بشید و برای درک بیشترش باید داخل پروژه ازشون استفاده کنید و نتایج رو ببینید تا متوجه دلیل ایجادشون بشید

در این دوره سعی شده در پروژه‌ها تا حد زیادی از مفایهم براتون جا بیوفته

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