الحصول على خطأ فادح: باستخدام $ هذا عندما لا يكون في سياق الكائن في STEMMER.PHP على السطر 317 [مكرر

StackOverflow https://stackoverflow.com/questions/3628278

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أحصل على خطأ فادح: باستخدام $ هذا عندما لا يكون في سياق الكائن في STEMMER.PHP على السطر 317.

في الوقت الحالي ، أستخدم فئة STEMMER التي وجدتها على الإنترنت لتغيير الكلمات إلى إصدارها الجذري قبل البحث في قاعدة البيانات عن المباريات.

لقد قرأت جميع المنشورات ذات الصلة حيث يواجه الناس مشكلة مماثلة. الفرق هو أن الرمز الذي يسبب الخطأ هو بالتأكيد ضمن سياق الكائن (سوف يوضح الرمز أدناه ذلك). الشيء الغريب الآخر هو أن هناك أجزاء من الكود تشبه إلى حد كبير الخطأ قبل وبعد ذلك لا يبدو أنه يسبب أي صعوبات. في أوقات مختلفة ، تغير خط الخطأ إلى بعض هذه الخطوط الأخرى.

هل لدى أي شخص أي أفكار يمكن أن تسبب المشكلة. أنا أستخدم php5.1.34 إذا كان هذا يحدث أي فرق.

الكود الذي يدعو فئة STEMMER

if (isset($search) && $search != "") {
    $filtered_words = WordFilter::filter($search);

    foreach($filtered_words as $word) {
        if(strlen($word) <= 2) {
            continue;
        }
        $w = Stemmer::stem($word);
        $stemmed_words[] = $w;
    }
}

فئة STEMMER:

class Stemmer
{

...

    if ( strlen($word) > 2 ) {
        **$word = $this->_step_1($word);**
    }

...

}

حتى عندما يحدث الخطأ في أماكن الاختلاف داخل الكود ، يبدو دائمًا أنه عندما يكون هناك رمز يحاول استدعاء طريقة أخرى داخل نفس الفئة. هل يمكن أن يكون هذا خطأ في PHP5 لا أعرفه؟ أي نصيحة سيكون موضع تقدير كبير.

شكرا أرشي

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

المحلول

باستخدام $ هذا في طريقة ثابتة.

الأساليب الثابتة ليس لها مثيل ؛ يجب عليك الوصول إلى الخصائص/الأساليب الثابتة الأخرى أو إنشاء مثيل داخل الطريقة الثابتة للعمل معها.

على سبيل المثال

Stemmer::_step_1($word);

حيث أعلن في الفصل باسم

public static function _step_1($var) { [...] }

نصائح أخرى

هذا الخطأ stem ليست فئة ثابتة ، فهو يستخدم $ هذا. حاول استخدام هذا الرمز:

$Stemmer = new Stemmer;
$Stemmer->stem($word);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top