از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش کار با استفاده از نوع PHP – با نمونه های کد توضیح داده شده است

سرفصلهای مطلب
PHP یک زبان دینامیکی تایپ شده است. این بدان معنی است که انواع متغیر در زمان اجرا تعیین می شوند ، و شما نیازی به تعریف صریح انواع هنگام اعلام متغیرها ندارید.
یکی از ویژگی های منحصر به فرد PHP است دستبند نوع، مفهومی که هم می تواند جذاب و هم دشوار باشد.
Type Juggling هنگامی اتفاق می افتد که PHP به طور خودکار بسته به یک متغیر از یک نوع داده به دیگری تبدیل می کند روی روش استفاده از آن در حالی که ممکن است تلاش شما را نجات دهد ، در صورت عدم دقت ، می تواند منجر به رفتار غیر منتظره شود.
در این مقاله ، من توضیح خواهم داد که دستکاری نوع PHP چیست و چگونه کار می کند. در بخش های بعدی ، شما می آموزید که چگونه PHP دستگیره نوع را انجام می دهد و مثالهایی را مشاهده می کنید تا درک این مفهوم آسانتر شود.
دستکاری نوع PHP چیست؟
دستکاری نوع به توانایی PHP در انجام تبدیل های نوع ضمنی اشاره دارد. PHP به جای اینکه شما را ملزم به اعلام نوع متغیر کند ، زمینه ای را که در آن از متغیر استفاده می شود ارزیابی می کند و نوع آن را بر این اساس تغییر می دهد. این یک نتیجه مستقیم از تایپ پویا PHP است.
به عنوان مثال ، اگر از یک رشته در یک عملیات ریاضی استفاده می کنید ، PHP سعی خواهد کرد آن رشته را به یک عدد تبدیل کند. بیایید نگاهی به یک مثال سریع بیندازیم:
$number = "10"; // This is a string
$result = $number + 5; // PHP converts $number to an integer
echo $result; // Outputs: 15
در اینجا $number
به عنوان یک رشته شروع می شود اما به عنوان یک عدد صحیح در طول عملیات اضافی رفتار می شود. این تبدیل اتوماتیک همان چیزی است که باعث می شود دستگیره از نوع PHP بسیار قدرتمند و در بعضی مواقع غیرقابل پیش بینی باشد.
چگونه PHP دستگیره نوع را کنترل می کند؟
PHP انواع مبتنی بر ارزیابی را ارزیابی می کند روی زمینه عملیات. در هنگام جمع آوری انواع ، قوانین خاص برای تبدیل را دنبال می کند:
رشته به اعداد
اگر یک رشته حاوی یک مقدار عددی معتبر باشد ، PHP در صورت لزوم آن را به یک عدد تبدیل می کند. به عنوان مثال:
echo "5" + 10; // Outputs: 15
PHP رشته “5” را می بیند. این درک می کند که یک عدد است و قبل از افزودن آن به شماره 5 تغییر می کند.
بول ها در زمینه های عددی
در یک نوع داده بولی ، true
ارزش به عنوان رفتار می شود 1
وت false
به عنوان رفتار می شود 0
بشر اگر توجه نمی کنید ، این می تواند به نتایج غیر منتظره منجر شود:
echo true + 10; // Outputs: 11
echo false + 10; // Outputs: 10
این به ویژه در مقایسه خطرناک است:
var_dump(false == ""); // true
var_dump(true == "1"); // true
var_dump(false == "0"); // true
PHP سعی می کند قبل از مقایسه ، هر دو عمل را به یک نوع تبدیل کند ، که می تواند منجر به نتایج غیر منتظره شود. به عنوان مثال ، false == ""
است ، true
از آنجا که هر دو به صورت آزاد به عنوان ارزش های فال تعبیر می شوند.
آرایه ها و تبدیل نوع
آرایه ها را نمی توان مستقیماً به رشته ها تبدیل کرد. اگر سعی در انجام این کار دارید ، PHP بسته به یک خطای یا اخطار می دهد روی متن
در اینجا یک مثال آورده شده است:
$array = [1, 2, 3];
echo $array + 5;
echo $array . "test";
در اینجا خروجی با یک خطای کشنده وجود دارد:
Fatal error: Uncaught TypeError: Unsupported operand types: array + int in /var/www/test.php:3
Stack trace:
#0 {main}
thrown in /var/www/test.php روی line 3
این امر به این دلیل است که در تلاش است از آرایه ها در عملیات حسابی یا رشته ای استفاده کند ، که مانند انواع دیگر کار نمی کند. در عوض ، شما باید صریحاً آنها را با استفاده از توابع مانند تبدیل کنید count()
یا implode()
، بستگی روی آنچه در تلاش برای دستیابی به آن هستید:
$array = [1, 2, 3];
echo count($array) + 5; // Outputs: 8
در بخش بعدی ، ما برخی از نمونه های مرتبط با دستکاری نوع را بررسی خواهیم کرد تا به شما در جلوگیری از اشکالات احتمالی در کد خود کمک کند.
نمونه های دستکاری را تایپ کنید
مقایسه های سست (==
)
اپراتور مقایسه سست PHP (==
) برای مقایسه مقادیر از نوع دستکاری نوع استفاده می کند. این می تواند به نتیجه ای منجر شود که ممکن است با انتظارات شما مطابقت نداشته باشد:
var_dump(0 == "0"); // true
var_dump(0 == ""); // true
var_dump("123abc" == 123); // true
در این مثال ، PHP تبدیل می کند "123abc"
به شماره 123
به دلیل مقایسه سست ، حتی اگر "abc"
عددی نیست
مقایسه دقیق (===
) به عنوان یک راه حل
برای جلوگیری از مشکلات ناشی از مقایسه های سست ، از مقایسه دقیق استفاده کنید (===
). اینها هر دو مقدار و نوع را با هم مقایسه می کنند:
var_dump(0 === "0"); // false
var_dump(123 === "123"); // false
مقایسه دقیق اطمینان حاصل می کند که انواع آنها به هم ریخته نمی شود و خطر رفتار غیر منتظره را کاهش می دهد.
بنابراین سوال این است که ، چگونه می توانید با خیال راحت از نوع دستکاری نوع استفاده کنید؟ این همان چیزی است که در بخش زیر می آموزید.
چگونه می توان با خیال راحت دست و پنجه نرم کرد
از ریخته گری از نوع صریح استفاده کنید
اگر می خواهید یک متغیر از یک نوع خاص (مانند یک عدد صحیح یا شناور) باشد ، به جای اینکه PHP را حدس بزنید ، مستقیماً آن را تبدیل کنید. این از رفتار غیر منتظره جلوگیری می کند.
$input = "42cats";
$cleanNumber = (int)$input;
echo $cleanNumber + 10; // Outputs: 52
PHP “42cats” را به 42 تبدیل می کند. PHP این کار را حتی بدون ریخته گری انجام می دهد ، اما ریخته گری به وضوح آنچه را که می خواهید نشان می دهد و رفتار را ثابت نگه می دارد.
توجه: هر رشته غیر خالی (به جز “0”) می شود true
وقتی به یک بولی ریخته می شود.
قبل از استفاده ، ورودی را تأیید کنید
همیشه بررسی کنید که داده های ورودی نوعی است که انتظار دارید ، به خصوص اگر از کاربران یا منابع خارجی تهیه شود.
$price = $_POST['price'] ?? '';
if (is_numeric($price)) {
echo $price + 10;
} else {
echo "Please enter a valid number.";
}
یک رشته مانند "abc"
تبدیل شدن به 0
بدون این چک ، و می خواهید 10
– که اشتباه و گمراه کننده است.
در اینجا ، شما باید بررسی کنید که آیا ورودی آرایه ای است:
$data = $_POST['items'] ?? [];
if (is_array($data)) {
echo count($data);
} else {
echo "Invalid data format.";
}
این امر مانع از خطاها می شود که PHP سعی می کند از یک رشته یا شماره به عنوان آرایه استفاده کند.
مقایسه دقیق (===)
مقایسه های سست (==
) اجازه دهید PHP هنگام مقایسه مقادیر انواع را تبدیل کند. این می تواند باعث اشتباه شود.
var_dump(0 == "0"); // true
var_dump(0 == ""); // false (not expected)
var_dump("abc" == 0); // false
PHP هر دو طرف را به شماره تبدیل می کند ، بنابراین "abc"
می شود 0
بشر این معمولاً چیزی نیست که شما می خواهید.
برای حل این مسئله ، از مقایسه دقیق استفاده کنید (===
) برای بررسی مقدار و نوع:
var_dump(0 === "0"); // false
var_dump("123" === 123); // false
پیچیدن
Juggling Type Type یک شمشیر دو لبه است. از یک طرف ، امکان انعطاف پذیری و برنامه نویسی سریعتر را فراهم می کند ، اما روی اگر محتاط نباشید ، می تواند منجر به اشکالات ظریف شود.
با درک چگونگی کار کردن نوع دستکاری و پیروی از بهترین شیوه ها مانند مقایسه دقیق ، ریخته گری صریح و اعتبارسنجی ورودی ، می توانید کد خود را ایمن تر و پیش بینی تر کنید.
برای مقاله بعدی من با ما همراه باشید. می توانید آموزشهای مفید PHP را کشف کنید روی وبلاگ من ، Flatcoding. برای اطلاعات بیشتر می توانید دفترچه راهنمای PHP را نیز بررسی کنید. از خواندن شما متشکرم
منتشر شده در 1404-04-16 11:40:12