ما هي الطرق السحرية في PHP؟ وكيف يتم تنفيذها؟



ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن طرق السحر المختلفة في PHP مع أمثلة.

في ، يمكن تعريف الوظائف الخاصة بطريقة يمكن استدعاؤها تلقائيًا ولا تتطلب أي استدعاء وظيفة لتنفيذ الكود داخل هذه الوظائف. هذه الميزة متوفرة بطريقة خاصة تعرف بالطرق السحرية. في هذه المقالة ، سنناقش أهم طرق السحر في PHP.

ما هي طرق السحر في PHP؟

الطرق التي تبدأ بشرطة سفلية (__) تسمى بشكل عام الطرق السحرية في PHP. أسماء هذه الأساليب تقتصر على بعض قائمة بي أتش بي دعم الكلمات الأساسية المحجوزة. لذلك لا يجب تحديد أي دالة باسم طرق PHP السحرية.





Magic-Methods-in-PHP

عادة ، يجب تحديد هذه الوظائف من قبل المستخدم وليس هناك حاجة لاستدعاءها صراحة.



قائمة طرق السحر في PHP

  • __construct ()
  • __destruct ()
  • __call (متعة $ ، $ arg)
  • __callStatic ($ fun، $ arg)
  • __get (خاصية $)
  • __set (خاصية $ ، قيمة $)
  • __isset (محتوى $)
  • __unset (محتوى $)
  • __ينام()
  • __استيقظ()
  • __إلى سلسلة()
  • __يستحضر()
  • __set_state (مجموعة دولارات)
  • __نسخ ()
  • __debugInfo ()
  • __construct (): إنها طريقة يتم استدعاؤها تلقائيًا بعد إنشاء كائن. يمكن هنا تحديد أي عدد من الوسائط التي سيتم تمريرها عند إنشاء الكائنات.
عينة فئة {function user_def () {echo 'user selected constructor'} function __construct () {echo 'predefined constructor'}} $ obj = new sample ()؟>

  • __destruct (): المدمرة هي سمة شائعة للغة الموجهة للكائنات والتي يتم تشغيلها بمجرد عدم وجود مراجع أخرى لكائن معين.
user_def () // check الكائن تم إتلافه أو لم يكن echo is_object ($ obj). ' '؟>

  • __call (fun $، $ arg): يتم استدعاء هذه الطريقة عند استدعاء طريقة غير محددة أو يتعذر الوصول إليها. مما يعني أنه يتم استدعاؤه عندما يتم استدعاء طريقة غير محددة أو لا يمكن الوصول إليها على كائن.
run ('teacher') // إذا تم استدعاء الطريقة غير الموجودة داخل الكائن ، فسيتم استدعاء طريقة __call () تلقائيًا. $ obj-> أكل ('ashok'، 'orange') $ obj-> user_define ()؟>



  • __callStatic ($ fun، $ arg): يتم استدعاء هذه الطريقة عندما يتم استدعاء طريقة غير محددة أو لا يمكن الوصول إليها بطريقة ثابتة.
user_define ()؟>

  • __get (خاصية $): تُستخدم هذه الطريقة للحصول على قيم خصائص الفئة التي تم إنشاؤها ديناميكيًا عن طريق التحميل الزائد لخاصية PHP.
name = $ name $ this-> reg = $ reg} الوظيفة العامة __get ($ propertyName) {if ($ propertyName == 'reg') {if ($ this-> reg> 30) {return $ this-> reg - 10} else {return $ this -> $ propertyName}} else {return $ this -> $ propertyName}}} $ obj = new Student ('Ashok'، 60) // قم بإنشاء الكائن مع فئة الطالب وتعيين القيم الأولية للخصائص مع المنشئ. صدى 'اسم :'. obj-> الاسم. '// عندما يتم الوصول إلى الملكية الخاصة ، سيتم استدعاء طريقة __get () تلقائيًا ، حتى نتمكن من الحصول على قيمة الخاصية بشكل غير مباشر. صدى 'reg :'. obj-> reg. '' // يتم استدعاء طريقة __get () تلقائيًا , وتقوم بإرجاع قيم مختلفة وفقًا للكائن نفسه. ؟>

  • __set (خاصية $ ، قيمة $): تُستخدم هذه الطريقة لوضع قيم لخصائص الفئة التي تم إنشاؤها ديناميكيًا عن طريق التحميل الزائد لخاصية PHP.
name = $ name $ this-> reg = $ reg} الوظيفة العامة __set ($ property، $ value) {if ($ property == 'reg') $ value $ property = $ value public function fun () {echo 'My الاسم هو '. $ this-> name.' ، رقم التسجيل الخاص بي هو '. $ this-> reg}} $ obj = طالب جديد (' Ashok '، 40) // لاحظ أنه سيتم تغيير القيمة الأولية بواسطة الرمز أدناه. $ obj-> name = 'Sushma' // سيتم تعيين خاصية 'name' بنجاح. إذا لم يكن هناك طريقة __set () ، فسيقوم البرنامج بطرح استثناء. $ obj-> age = 16 // سيتم تعيين خاصية 'reg' بنجاح. $ obj-> reg = 160 // 160 قيمة غير صالحة ، لذلك فشل تعيينها. obj-> fun ()؟>

  • __isset (محتوى $) ؛ سيتم استدعاء هذا الأسلوب أثناء استدعاء isset () أو فارغ () لعضو غير محدد أو لا يمكن الوصول إليه. يتم استدعاؤه تلقائيًا أثناء التحقق مما إذا تم تعيين خاصية التحميل الزائد المطلوبة أم لا ، باستخدام الدالة PHP isset ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __isset ($ content) {echo 'خاصية {$ content} خاصة , يتم استدعاء طريقة __isset () تلقائيًا. 'echo isset ($ this -> $ content)}} $ obj = طالب جديد (' Ashok '، 30) // تم تعيينه في البداية. echo isset ($ obj-> gender)، 'echo isset ($ obj-> name)،' echo isset ($ obj-> reg)، '؟>

الفرق بين التجاوز والتحميل الزائد في جافا
  • __unset (محتوى $): سيتم استدعاء هذه الطريقة أثناء استدعاء reset () لعضو غير محدد أو لا يمكن الوصول إليه.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __unset ($ content) {echo 'يتم استدعاؤها تلقائيًا عندما نستخدم طريقة unset () خارج الفصل الدراسي. 'echo isset ($ this -> $ content)}} $ obj = طالب جديد (' Ashok '، 30) // تم تعيينه في البداية. unset ($ obj-> gender) unset ($ obj-> name) unset ($ obj-> reg)؟>

  • __ينام(): تسمى هذه الطريقة أولاً أثناء تنفيذ التسلسل (). تقوم بإرجاع مصفوفة خصائص الكائن عند تنظيف كائنات فئة PHP قبل التسلسل.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __sleep () {echo 'يتم استدعاؤها عندما يتم استدعاء طريقة serialize () خارج الفصل الدراسي. '$ this-> name = base64_encode ($ this-> name) إرجاع المصفوفة (' name '،' reg ') // يجب أن ترجع قيمة العناصر التي تمثل اسم الخصائص التي تم إرجاعها. }} $ obj = طالب جديد ('Ashok') // تم تعيينه في البداية. صدى تسلسل ($ obj) صدى ''؟>

  • __استيقظ(): يتم استدعاء هذه الطريقة أثناء تنفيذ إلغاء التسلسل (). سيعكس العمل لاستعادة خصائص وموارد الكائنات عند استدعاء إلغاء التسلسل ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __sleep () {echo 'يتم استدعاؤها عندما يتم استدعاء طريقة serialize () خارج الفصل الدراسي. '$ this-> name = base64_encode ($ this-> name) إرجاع المصفوفة (' name '،' reg ') // يجب أن ترجع قيمة العناصر التي تمثل اسم الخصائص التي تم إرجاعها. } public function __wakeup () {echo 'يتم استدعاؤها عندما يتم استدعاء طريقة unserialize () خارج الفصل الدراسي. '$ this-> name = 2 $ this-> gender =' Male '}} $ obj = طالب جديد (' Ashok ') // تم تعيينه في البداية. var_dump (serialize ($ obj)) var_dump (unserialize (serialize ($ obj)))؟>

  • __إلى سلسلة(): سيتم استدعاء هذه الطريقة أثناء استخدام طريقة echo لطباعة كائن مباشرة. من المتوقع أن تُرجع قيمة سلسلة أثناء استخدام مثيلات الفئة مع عبارات طباعة PHP.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __toString () {return 'go go go'}} $ obj = طالب جديد ('Ashok') // تم تعيينه في البداية. صدى $ obj؟>

  • __يستحضر(): يتم تعريف هذه الطريقة في فئة سيتم استدعاؤها أثناء محاولة استدعاء كائن بطريقة استدعاء الوظيفة.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __invoke () {echo 'This is an object'}} $ obj = طالب جديد ('Ashok') // تم تعيينه في البداية . obj $ ()؟>

  • __set_state (مجموعة دولارات): يتم استدعاء هذه الطريقة أثناء استدعاء var_export (). إنها طريقة ثابتة يتم استدعاؤها أثناء تصدير مصفوفة خصائص الكائنات وتتوقع متغير المصفوفة مثل الوسيطة الخاصة به.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender}} $ obj = طالب جديد ('Ashok') // تم تعيينه في البداية. var_export ($ obj)؟>

  • __نسخ (): يتم استدعاء هذه الطريقة عند نسخ الكائن.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __clone () {echo __METHOD __. 'أنت تقوم باستنساخ الكائن. '}} $ obj = طالب جديد (' Ashok ') // تم تعيينه في البداية. $ obj2 = clone $ obj var_dump ('object1:') var_dump ($ obj) echo '' var_dump ('object2:') var_dump ($ obj2)؟>

  • __debugInfo (): يتم استدعاء هذه الطريقة بواسطة var_dump () أثناء تفريغ كائن للحصول على الخصائص التي يجب عرضها. إذا لم يتم تحديد الطريقة على كائن ، فسيتم عرض جميع الخصائص العامة والمحمية والخاصة.
prop = $ val} public function __debugInfo () {return ['propSquared' => $ this-> prop ** 2،]}} var_dump (نموذج جديد (22))؟>

بهذا نصل إلى نهاية هذه الطريقة السحرية في مقالة PHP. أتمنى أن تكون قد حصلت على فكرة عن طرق السحر المختلفة في PHP.

تفحص ال من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات ' طرق السحر في بي أتش بي 'وسأعود إليك.