مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

برای این کار چند تابع ایجاد کنم یا یک کلاس در PHP ؟؟؟

پنج شنبه, 02 خرداد 1398 12:10

برای این کار چند تابع ایجاد کنم یا یک کلاس در PHP ؟؟؟

سلام دوستان
من برای یک کار خاص در سایت که بارها و بارها مورد استفاده قرار میگیره برای اینکه نیاز نباشه در همه جای سایت صدبار کد رو بنویسیم کدها رو تبدیل کردم به function و فقط در جای مورد نظر اون رو فراخوانی میکنم و مقادیر مربوطه رو بهش میدم

یک سری فیلدهای خاص دارم که هر کدوم باید چندین بررسی خاص روی مقدار اونها انجام بشه
- مثلاً فیلد نوع A باید از نظر تعداد کاراکتر حداقل و حداکثر و نوع کاراکتر ورودی بررسی بشه
- فیلد نوع B باید از نظر تعداد لغت بررسی بشه
- فیلد نوع C باید از نظر استفاده از کاراکترهای خاص مورد بررسی قرار داده بشه
- فیلد نوع D باید بررسی بشه که حداقل دو نوع از چهار گروه کاراکتر توی اون وجود داشته باشه

حالا چون در جاهای مختلفی از سایت از این فیلدها در فرمهای مختلف استفاده شده و باید با PHP مقدار وارد شده در هر کدام مورد بررسی قرار بگیره، من اومدم چهار تابع برای هر کدام تعریف کردم که مقدار هر کدام را به تابع مربوطه به خودش میدم و از نتیجه اون استفاده میکنم

(البته در آینده این چهار نوع به 8 نوع تبدیل میشه و باید چهار تابع دیگه هم کدنویسی و اضافه بشه)

آیا من باید این چهار یا در آینده هشت تابع رو به یک کلاس تبدیل کنم یا همینجوری به شکل چند تابع مجزا تعریف بشه؟

* یا حتی بهتر بپرسم سوالم رو :
چه مواقعی یک برنامه نویسی میاد و توابعش رو به یک کلاس تبدیل میکنه ؟
چه مزایایی داره استفاده از یک کلاس که مثلاً از 8 تابع تشکیل شده باشه با اینکه توابع مجزا باشند؟
آیا با توجه به اینکه هر فیلد عملیات کاملاً متفاوتی روی اون انجام میشه و تنها بخشی که بین دو تا از اونها یکسان هست بررسی حداقل و حداکثر طول کاراکترشون هست، آیا به یک کلاس تبدیل کنم بهتر هست ؟

ببخشید توضیحات طولانی شد چون واقعا نمیدونستم چطور مطرح کنم که به جواب مورد نظرم برسم
هر چقدر سرچ کردم فقط از نحوه ایجاد کلاس مطلب پیدا میشد
لطفاً من رو راهنمایی کنید

پنج شنبه, 02 خرداد 1398 14:07

سلام

نکته اول اینکه از ساختار class ها استفاده کنید خیلی بهتر از ساختار function هست. 

برای ساخت کلاس ها معمولا اینجوری کار میشه که متدهایی که داخل یک کلاس ساخته میشه، کارهایی از یک نوع رو انجام میدن و یا به هم ربط دارن.

حالا برای ساخت کلاس دو روش رو میتونید انجام بدین، یکی حالت عادی کلاس ها هست که برای استفاده باید اول اون کلاس رو new کنید و بعد به متدهاش دسترسی پیدا کنید.

روش دوم هم این هست که متدهای داخل کلاس رو به صورت static تعریف کنید که بدون new کردن کلاس، قابل دسترسی هستن. فقط توی انتخاب این روش دقت کنید، دردسرهای خاص خودش رو داره.

ضمنا متد ها، همون توابع هستن که داخل کلاس قرار دارن.

حالا در مورد مثال شما، اگر هر ۴ تا تابعی که دارید کارهای یک مدل رو انجام میدن که به نظر میاد همین طور باشه که یه چیزی رو بررسی میکنن، خوب میشه توی یک کلاس قرار داد. حتی اگر ۴ تا تابعی که میخواهید در آینده اضافه کنید هم به این مدل شبیه هستن، خوب اونها رو هم توی همین کلاس بگذارین.

توجه کنید که این ۴ تا تابع کار بررسی کردن رو دارن انجام میدن و خوب نوع بررسی هاشون روی فیلدهای متفاوت هست.

یه نکته ای رو هم میتونم اضافه کنم این هست که برای نوع کلاس آیا بر اساس نوع فیلد باشه و یا چیز دیگه که من بالاتر توضیح دادم بر اساس عملیات باشه.

کلاسهاتون رو اینجوری هم میتونید تعریف کنید که بر اساس نوع فیلد باشه. این به طور خلاصه به طراحی شما برمیگرده.

اگر مثلا نوع فیلد a دارای کارهای دیگه ای هم هست، مثلا یه تابع دارین که یه چیزی رو بررسی میکنه روی فیلد a، یکی دیگه دارین مثلا یه کار دیگه انجام میده و به همین ترتیب برای فیلد نوع a چند تابع دارین، بعد همین داستان برای فیلد نوع b هم هست، حالا به جای اینکه کلاس رو بر اساس کاری که انجام میده بسازین، بر اساس نوع فیلد بسازین.

بعدش همه توابعی که مربوط به فیلد نوع a هستن رو بیارید داخل اون کلاس. اینجوری در آینده اگر بخواهید کار جدیدی برای فیلد a اضافه کنید، راحت پیدا میکنید که کجا باید اضافه بشه.

حالا یه مثال میزنم که شاید کمی واضحتر کنه قضیه رو:

فرض کنید من میخوام یه سایت فروشگاهی بسازم، این سایت بخش های مختلفی داره.

فرضا میام یه کلاس تعریف میکنم برای سبد خرید، یه کلاس برای صدور فاکتور، یه کلاس برای محصولات و به همین ترتیب کلاسهای میسازم که به چیز خاصی ارتباط دارن.

از طرفی یه کلاس تعریف میکنم برای ارتباط با دیتابیس، کارش فقط اینه که یه کوئری میگیره و به دیتابیس میفرسته و جواب رو برمیگردونه. یه کلاس میگذارم برای نمایش خطا که کارش اینه که یه کد خطا میگیره و پیام مناسبی نمایش میده و به همین شکل کلاسهایی می سازم که کار خاصی انجام میدن.

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

حالا نکته اینه که توی کلاسهای سری اول، از این کلاس های سری دوم هم استفاده میکنم. البته کلاسهای سری هم بعضی هاشون از همدیگه هم استفاده میکنن.

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

کسانی که از این پست تشکر کرده اند : rewrew,

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید