نوب
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', 'ارسال انجام شد');
}

لاراول
laravel_8
class
helpers
تگ‌های محبوب
ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@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);

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

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