سؤال

أنا أستخدم أ ge_called_class اختراق للسماح بالربط الثابت المتأخر في الإصدار 5.2 PHP (تم العثور عليه هنا).

لدي ما يلي في الكود الخاص بي:

# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");

هذا لن يعمل في PHP 5.2 لسبب ما ، لذلك فعلت هذا:

# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");

هذا من ناحية أخرى لن يعمل مع get_called_class وظيفة. أحصل على خطأ في أن file لا يمكن أن تقرأ الوظيفة القسم الذي تم تقييمه من التعليمات البرمجية.

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم Eval ، فإن الحل الخاص بك خاطئ.

لماذا لا يعمل نسختك غير eval؟ ما هو الخطأ؟ ما هي رسالة الخطأ الكاملة والكاملة؟

نسخة من المستخدمين من get_called_class يقوم بإجراء الخلفية ويحاول فتح ملف المتصل لتحديد اسم الفصل. السبب في فشل EVAL هو أن REATH BACKTRACE لا يوفر اسم ملف.

(تحرير: أيضا ، ذلك get_called_class الاختراق هو الاختراق إلى حد كبير. هل هناك سبب لا يمكنك استخدام 5.3؟)

هل حاولت استخدام call_user_func? call_user_func(array($ac, 'find'), 'all') ينبغي استدعاء الطريقة الثابتة find لاسم الفصل الوارد في $ac مع الباراماتير 'all'. انظر أيضا من النوع الزائف من النوع ، ومثال "النوع 2" في محددة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top