همانطور که در جلسات گذشته گفته شد زمانی که بخواهیم به یک متدی که درون کلاس وجود ندارد و یا غیر public است (protected یا private) از بیرون کلاس و در قالب آبجکت دسترسی پیدا کنیم می بایست از متد call استفاده نمائیم.

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

برای شروع کلاسی را بعنوان Calc تعریف می کنیم که این کلاس دو مقدار را برای محاسبه دریافت می کند و عملیات ریاضی (+-/*) را انجام می دهد.دو مقدار اولیه num1 و num2 از بیرون کلاس قابل دسترسی نیستند.

مثال:

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

در این مرحله متدهای ریاضی خود را می نویسیم.

 

تست خروجی عملیات ریاضی در کلاس ماشین حساب

 

ساخت کلاس پیشرفته

در مرحله بعد از روی Calc ارث بری می کنیم و کلاس جدیدی به نام CalcAdvanced ایجاد می کنیم.در این کلاس تابع سازنده را ایجاد کرده ایم اما این تابع مقادیر خود را به تابع پدر یعنی Calc ارسال می کند و مقادیر num1 و num2 مقدار دهی می شوند.

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

در قسمت بعد خصوصیتی را بصورت private و از نوع آرایه تعریف می کنیم که این آرایه کلیدش نام تابع و مقدارش تعداد پارامترهای آن می باشد.این آرایه لیست توابعی است که ممکن است از بیرون کلاس درخواست شود. اعداد نیز تعداد پارامترهای پیش فرض تابع موردنظر است.

 

استفاده از متد call

حال در این بخش متد call خود را که از نوع public است ایجاد می کنیم.این تابع دارای دو پارامتر است پارامتر اول نام متد و پارامتر دوم تعداد پارامترهای تابع مورد نظر است.

حال باید درون این تابع دستور شرطی را قرار بدهیم که آیا methodName وارد شده از بیرون کلاس درون آرایه allowFunctions وجود دارد یا خیر در صورتی که وجود دارد عملیاتی را انجام دهد.

در این حالت با استفاده از تابع array_keys کلیدهای آرایه allowFunctions را دریافت کرده و درون تابع دیگری به نام in_array بررسی کرده ایم که آیا methodName مورد نظر در این آرایه وجود دارد یا خیر.

برای مثال از بیرون کلاس نام pow برای تابع صدا زده شده است.این واژه که همان methodName است در درون کلیدهای آرایه allowFunctions بررسی می شود که وجود دارد یا خیر.

در این مرحله و درون شرط باید آرگومان های خود را ایجاد کنیم. در مرحله اول متغیری را از نوع آرایه به نام arguments ایجاد می کنیم.

هر تابع حداقل یک پارامتر را دارد.بنابراین مقدار نخست ارسال شده در هنگام ساخت آبجکت یعنی num1 را بعنوان مقدار اول آرایه arguments در نظر می گیریم.

حال باید بررسی کنیم در صورتی که تابع صدا زده شده methodName درون آرایه allowFunctions بیشتر از یک پارامتر دارد، مقدار بعدی به آرایه arguments اضافه شود.برای اینکار شرط خود را قرار می دهیم و برای اضافه کردن از متد array_push استفاده می کنیم.

در آخر نیز تابع call_user_func_array را وارد کرده و آن را برگشت می دهیم وظیفه این تابع فراخوانی تابع دیگری است که توسط کاربر تعریف شده است. این تابع دارای دو پارامتر است نام تابع که همان methodName و پارامترها در قالب آرایه که همان arguments است.

 

تست کلاس پیشرفته

برای تست از روی کلاس CalcAdvanced یک شی می سازیم و مقادیر خود را به درون آن ارسال می کنیم.در مثال زیر از تابع pow  استفاده کرده ایم و مقدار خروجی برابر با ۳۲ است.

دیدگاه خود را بیان کنید

این ایمیل برای عموم منتشر نمی شود