تعداد بازدید: 490

شی گرایی در php (قسمت چهارم)

در این مقاله قصد داریم تا مباحث زیر رو بررسی کنیم:

  • stdClass
  • class constants
  • class functions
  • Magic Methods

stdClass

اگر خاطر داشته باشید در زبان جاوا اسکریپت ما یک شی درست می کردیم و پس از آن مقادیر را برای شی set می کردیم . این امر در پی اچ پی به وسیله کلاس از پیش تعیین شده stdClass امکان پذیر هست.

stdClass یه کلاس خالیه که میتونید متغیرهاتون رو بهش اضافه کنید.

خوب بدین شکل ما یک متغیر پیشرفته تر از آرایه ها داریم . (یعنی یک شی) . خروجی به شکل زیر خواهد بود:

stdClass Object ( [name] => abolfazl [nic_name] => papillon [job] => computer_man [lvoe] => dont ask me about this is secret )

می تونید یک کلاس رو تعریف کنید و بعد بیاید و مقادیری رو براش set کنید . دقت داشته باشید به خروجی مثال زیر:

خروجی کد زیر به شکل زیر خواهد بود :

car Object ( [wheel] => 4 [door] => 2 [model] => c400 )

نکاتی در رابطه با stdClass :

  • دقت داشته باشید به وسیله تابع foreach می تونید به المنت های شی stdClass دسترسی داشته باشید.
  • به وسیله stdClass شما می تونید آرایه ای از اشیا داشته باشید که این خیلی میتونه بهتون کمک کنه.
  •  دقت داشته باشید که ما مثل جاوا اسکریپت نمیتونیم که در stdClass متد تعریف کنیم.

ثوابت در کلاس ها

ما در کلاس هامون می تونیم از ثوابت زیادی استفاده کنیم که هر کدوم از اون ها مقادیری رو دارا هستند.

__CLASS__ : نام کلاس جاری

__METHOD__ : نام متد جاری

تابع clone برای اشیا

هرزمان که شما یک متغیر ساده تعریف می کنید (از نوع اولیه مثل عدد رشته و …) نام و مقدار مستقیما در حافظه stack ذخیره میشوند اما زمانی که متغیری از نوع شی می سازید اون به صورت یک اشاره گر به حافظه ذخیره میشه. کد زیر را در نظر بگیرید.

زمانی که ما یک دو شی رو برابر قرار میدیم (با عملگر =) اون دو شی دقیقا به یک مکان از حافظه اشاره می کنند و عملا یکی هستند و با تغییر هرکدوم اون یکی دیگه هم تغییر میکنه.

برای حل این مساله از تابع clone استفاده می کنیم.

توابع زیادی در رابطه با کلاس ها در پی اچ پی داریم که به برخی از اون ها اشاره می کنیم:

class_existsc :  این که کلاسی وجود داره یا خیر (مثل function_exists) میشه برای اطمینان قبل از instance گرفتن از این تابع استفاده کنیم.

get_class : اگر یک شی داشته باشیم و بخوایم نام کلاسشو بگیریم.(ورودی شی)

get_called_class : فرض کنید که ما یه متد استاتیک داریم در دو کلاس که از هم ارث برده شده اند. خب در زمان فراخوانی متد استاتیک از کجا بفهمیم که این متد از کدوم کلاس فراخوانی شده ؟ باید از این تابع استفاده کنیم. به مثال زیر دقت کنید :

get_class_methods : برای گرفتن تمامی متدهای یک کلاس.(ورودی کلاس)

get_class_vars :‌ برای گرفتن تمامی متغیر های نمونه یک کلاس.(ورودی کلاس)

get_declared_classes : کل کلاس های تعریف شده در برنامه (این مورد خیلی به فهم نحوه کار برنامه کمک می کنه)

get_object_vars : کل متغیرهای نمونه شی رو میده (ورودی شی).

is_a : به وسیله این تابع می تونید بفهمید که یک شی از فلان کلاس هست یا خیر.

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

Magic methods – call

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

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

با استفاده از این Magic method ما می توانیم یک سری متد های مشابه را با پارامتر های یکسان با هم ادغام (merge) کنیم :

به طور مثال در کلاس بالا به جای نوشتن دو متد با نام های methodPost , methodGet ما __call را صدا می زنیم که در درون آن عملیات مشابه با پارامتر های متفاوت انجام می شود.

مطالب مشابه

هدر های Http در درخواست و پاسخ

Http Headers (قسمت سوم)

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

ftp-protocol-in-php

کار با پروتکل FTP در PHP

یکی دیگر قوانین حاکم بر دنیای وب ( از پروتکل های اینترنت لایه کاربرد ) پروتکل ftp است که با استفاده از آن می توانیم...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای شی گرایی در php (قسمت چهارم)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *