در PHP، وقتی مقدار عددی درون رشته (string) باشد — مثل "۱۰" یا "۵ apples" — و در یک عمل ریاضی استفاده شود، PHP بهصورت پیشفرض آن را به عدد تبدیل (type juggling) میکند. مثلاً:
$a = "10";
$b = 5;
echo $a + $b; // خروجی: ۱۵
🔹 این رفتار خودکار گاهی باعث بروز خطا یا نتیجه غیرمنتظره میشود.
برای جلوگیری از محاسبه خودکار رشتههای عددی در عملیات ریاضی، چند روش وجود دارد:
✅ روش ۱: استفاده از declare(strict_types=1);
اگر در بالای فایل بنویسی:
declare(strict_types=1);
در این صورت، اگر تابعی عدد بخواهد ولی رشته بدهی، خطای TypeError میگیری.
اما توجه کن: این فقط در تابعهایی که نوع ورودیشان مشخص شده کار میکند، نه در تمام عملیات ریاضی ساده.
مثلاً:
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
echo add("10", 5); // خطا میدهد
✅ روش ۲: بررسی نوع داده با is_numeric() یا is_int()
قبل از انجام عمل ریاضی، نوع متغیر را بررسی کن:
$a = "10a";
if (is_numeric($a)) {
echo $a + 5;
} else {
echo "خطا: مقدار عددی نیست!";
}
📌 این روش اجازه محاسبه را فقط در صورت عددی بودن واقعی مقدار میدهد.
✅ روش ۳: تبدیل صریح (type casting) و بررسی نتیجه
اگر بخواهی مطمئن شوی فقط در صورت درست بودن تبدیل انجام شود:
$a = "10a";
if ((string)(int)$a === $a) {
echo $a + 5;
} else {
echo "خطا: مقدار عددی معتبر نیست.";
}
✅ روش ۴: استفاده از توابع اعتبارسنجی فیلترها
تابع filter_var() نیز میتواند برای بررسی دقیقتر استفاده شود:
$a = "10a";
if (filter_var($a, FILTER_VALIDATE_INT) !== false) {
echo $a + 5;
} else {
echo "خطا: فقط عدد صحیح مجاز است!";
}
🔒 خلاصه کاربردی:
| هدف | دستور مناسب |
|---|---|
| جلوگیری از محاسبه رشتهها در تابعها | declare(strict_types=1) |
| بررسی قبل از محاسبه | is_numeric() یا filter_var() |
| کنترل دستی نوع | تبدیل صریح و مقایسه |

