نوب
3 سال پیش توسط نوب مطرح شد
2 پاسخ

خطای Call to a member function on string در لاراول

@mhyeganeh
@gomnam
سلام
من دارم ارسال پیامک انجام میدم و زمانی که ارسال میزنم خطای Call to a member function sendsms() on string را میده

خط $sendClass->sendsms($username, $password, $from, $numbers, $txts); را خطا میده و میگه به صورت رشته میزنی .

خب من اومدم کلاس را در پوشه helpers تعریف کردم و رجیسترش کردم و کلاس را به درستی میشناسه.
مشکل از چیه ؟

نکته : توی کد متغیرهای username و password را به صورت هارد کد فعلا برای تست زدم
کد بخش store

    public function store(Request $request)
    {
        $username = '********'; // required
        $password = '********'; // required
        $from = $request ['from']; // required
        $sms = $request ['message']; // not required

        // $api = api::where('id', '=', $request->from)->firstOrFail();
        $numbers = explode("\r\n", $request->numbers);
        $insert_data = collect();
        foreach ($numbers as $value) {
            $insert_data->push([
                'number' => $value,
                'user_id' => auth()->user()->id,
                'status' => 'send',
                'text' => $request->message,
                'from' => $request['from'],
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now(),
            ]);
        }
        foreach ($insert_data->chunk(100) as $chunk) {
            foreach ($numbers as $p) {
                $txts [$p] = $sms;
            }
            // DB::table('sms')->insert($chunk->toArray());
            $sendClass = \App\Helpers\SMSTools:: class;
            $sendClass->send_sms($username, $password, $from, $numbers, $txts);

        }
        return redirect()->back()->with('success', 'ارسال انجام شد');

    }

ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش آپدیت شد
1

با سلام .
شما باید یک آبجکت از کلاس SMSTools داشته باشید تا متد send_sms رو روش صدا بزنید.
با نوع صدا زدنتون شما دارید اسم کلاس رو با namespace کاملش میریزید داخل متغیر... در واقع متغیر sendClass شما به اینصورته:

$sendClass = '\App\Helpers\SMSTools'; 
'\App\Helpers\SMSTools'->send_sms(); // ?!?! impossible -> error

و خوب قاعدتا نمیتونید متدی رو روی string صدا بزنید و نیاز به ساختن ابجکت از کلاس دارید.
(اگر در درک مطالب مشکل داشتید پیشنهاد میکنم مباحث شی گرایی | OOP رو مجددا مرور کنید)
موفق باشید


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

همون طوری که بالا اشاره شد ابتدا باید با new یک آبجکت از کلاس بسازید و بعد متد رو صدا کنید:

//مثلا اینجوری:
$sendClass = new \App\Helpers\SMSTools();
$sendClass->send_sms($username, $password, $from, $numbers, $txts);

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام