پی اچ پی شامل ۱۵ متد ویژه است که متد جادویی (Magic Method) نامیده می شوند و این متدها همگی دارای دو زیر خط (Under Line) در آغازشان هستند. بنابراین دو متد ()construct__ و ()deconstruct__ دو متد جادویی هستند. توجه کنید درون کلاس هیچ تابعی (متدی) نمی تواند همنام با متدهای جادویی باشد. متدهای جادویی در بروز یک رویدا، به صورت خودکار فراخوانی می شوند. نمونه آن متد ()construct__ که در زمان ایجاد یک نمونه از کلاس، به صورت خودکار فراخوانی می شود.

متد ()toString__

در مطلب تعریف متغیرها و نمایش مقدار آنها در پی اچ پی نشان دادیم که می توانیم بوسیله تبدیل گونه (Type Casting) می توانیم یک مقدار را به رشته تبدیل کنیم. همچنین در مطلب تابع های درونی برای آرایه در پی اچ پی آموزش دادیم که می توانیم بوسیله تابع ()implode یک آرایه را به رشته تبدیل کنیم که درون رشته ایجاد شده، هر کدام از عنصرهای درون آرایه با یک جدا کننده دلخواه از عنصر دیگری جدا شده است.

زمانی که لازم باشد تا یک شی به عنوان یک رشته رفتار کند، باید متد ()toString__ درون کلاس پیاده فراخوانی و پیاده سازی شده تا به صورت خودکار فراخوانی شود. متد جادویی ()toString__ هیچ آرگومان ورودی را دریافت نمی کند و یک رشته را برگشت می دهد. توجه کنید که متدهای جادویی همگی درون پی اچ وی رزرو شده اند و نمی توان انها را برای کاربرد دیگری به کار ببریم.

در شکل زیر قطعه کدی را می بینید که شامل تابع سازنده و ()toString__ است. همانطور که می بینید متد ()toString__ از دید کاربرد، جایگزین متد ()printBookInfo شده است. در ادامه یک نمونه از کلاس Book به نام book$ ایجاد شده است و در پایان بوسیله دستور echo خود شی book$ در برگه وب چاپ خواهد شد و این این همان چیزی است که گفتیم یک شی نیاز دارد رفتار رشته داشته باشد. در واقع زمانی که شی book$ در جلوی echo نوشته و اجرا می شود، چون متد ()toString__ درون کلاس آن پیاده سازی شده است، پس خود به خود این متد فراخوانی خواهد شد.

گمان کنید (فرض کنید) که شما متد ()toString__ را پیاده سازی نکرده اید و واپسین خط شکل زیر (۳۰) را اجرا کرده اید، یعنی نام شی book$ را پیش روی echo نوشته اید، پس چون پیاده سازی ()toString وجود ندارد، پس باید خطای زیر نشان داده شود، مبنی بر این که شی book$ نمی تواند به رشته تبدیل شود.