در توییتی که در بالا توضیح دادم یک برنامه ساده برای محاسبه برنامه روزانه خودم نوشتم که در همین حین به خطایی که در عنوان مشاهده می‌کنید برخوردم که دلیلی شد بر ایجاد این پست، بریم ببینیم این خطا چیه.
اگه دوست داشتید می‌تونید من رو در توییتر یا کانال تلگرام دنبال کنید.🙂🌺

عملگرهای ریاضی در پی‌اچ‌پی نه تنها از اعداد، بلکه از رشته های متنی نیز، به عنوان عملوند استفاده می‌کنند.

به طور مثال 1+ 1 می‌شود 2، همچنین ‘1’ + ‘1’ هم همان نتیجه را می‌دهد.
این می‌تواند یک ویژگی خوب هنگام دریافت ورودی کاربر باشد که اغلب در وب بصورت رشته متنی دریافت می‌شود.

در هر حال اپراتور های ریاضی (+ – * / ** % << >> | & ^) در پی‌اچ‌پی 7.1 یا بالاتر فقط رشته های صرفا عددی را قبول نمی‌کنند بلکه بروی رشته های متنی هم عملیات ریاضی را انجام می‌دهند.

این ممکن است باعث سردرگمی برنامه نویسان php که با سایر زبان ها هم کار کرده اند بشود زیرا در برخی زبان ها علاوه بر جمع، از + برای چسباندن رشته ها به هم استفاده می‌شود.

در عملیات زیر php بجای یک رشته متنی 0 در نظر می‌گیرد به طور مثال:

echo "not a number" + "12";

یا به عبارتی 0 + 12 می‌شود 12 البته همراه با خطای زیر:

Warning: A non-numeric string encountered

12

همچنین هنگامی که از یک رشته متنی و عددی استفاده می‌کنید، عملیات را انجام و همراه با خطا جواب را نمایش می‌دهد:

echo "10 apples" + "5 pears";

نتیجه:

Notice: A non well formed numeric value encountered
15

یکی از راه های رفع خطای بالا تبدیل نوع متغیر به integer (عدد صحیح) با تابع (int) هست، به این صورت:

echo ((int)"10 apples" + (int)"5 pears");

نتیجه:

15

یا می‌توانید قبل از انجام عملیات ریاضی با تابع های is_numeric یا is_integer بررسی کنید که متغیر از نوع عددی یا عدد صحیح هست یا خیر، به طور مثال:

if (is_numeric($variable)
if (is_integer($variable)

ممکن است متغیری رو بصورت رشته خالی یا متنی شروع کنید:

$variable = "";

که در محاسبات باز به خطا می‌خورید باید آن را با عدد 0 شروع کنید:

$variable = 0;

همچنین ممکن است در حین عملیات ریاضی رشته ای متنی را به متغیر اضافه کنید که با دو روش زیر می‌تونید تاحدی از خطاها دوری کنید.

برای محاسبه و اختصاص مقدار به متغیر در رشته های عددی می‌توان از علامت =+ استفاده کرد:

$variable = 1;
echo $variable += 2;

به یاد داشته باشید برای اختصاص مقدار به رشته های متنی از علامت =. استفاده می‌کنیم:

$variable = "";
echo $variable .= 2;

منابع:

https://wiki.php.net/rfc/invalid_strings_in_arithmetic
https://www.php.net/manual/en/migration71.other-changes.php
https://stackoverflow.com/questions/42044127/warning-a-non-numeric-value-encountered
https://stackoverflow.com/questions/47434457/warning-a-non-numeric-value-encountered-php-mysql
https://stackoverflow.com/questions/52733078/how-do-i-fix-my-php-warning-a-non-numeric-value-encountered-error


۰ دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *