سطح C: جراحی رشتهها و کنترل دقیق انواع
در این سطح پیشرفته، ما کنترل بیشتری روی دادهها به دست میآوریم. یاد میگیریم که چگونه به صورت دستی انواع را تغییر دهیم، مقایسههای دقیقتری انجام دهیم و با توابع قدرتمند، رشتهها را دستکاری کنیم.
محتوای آموزشی
۱. مقایسه نرم (==) در مقابل مقایسه سخت (===)
مقایسه نرم (==): فقط مقدارها را مقایسه میکند و سعی در تبدیل نوع دارد. ("123" == 123 نتیجهاش true است).
مقایسه سخت (===): هم مقدار و هم نوع داده را مقایسه میکند. ("123" === 123 نتیجهاش false است).
قانون طلایی: همیشه و تا جای ممکن از مقایسه سخت (===) استفاده کنید.
۲. کستینگ (Casting): تبدیل نوع دستی
گاهی ما میخواهیم به صورت صریح نوع یک متغیر را تغییر دهیم. این کار با قرار دادن نوع جدید داخل پرانتز قبل از متغیر انجام میشود: (int)$var, (string)$var, (bool)$var.
۳. توابع پیشرفته برای کار با رشتهها
strlen($string): طول یک رشته را برمیگرداند.str_replace(find, replace, string): یک متن را در رشته جستجو و جایگزین میکند.strtolower($string): تمام حروف را کوچک میکند.ucwords($string): حرف اول هر کلمه را بزرگ میکند.
۴. مشکل دقت در اعداد اعشاری (Float)
کامپیوترها برخی اعداد اعشاری را نمیتوانند دقیق ذخیره کنند. برای نمایش به کاربر از number_format() یا round() استفاده کنید و هرگز دو عدد اعشاری را مستقیماً با هم مقایسه نکنید.
کارگاه عملی: کنترل دقیق دادهها
<?php
// 1. مقایسه نرم در مقابل سخت
$num_int = 123;
$num_str = "123";
var_dump($num_int == $num_str); // bool(true)
var_dump($num_int === $num_str); // bool(false)
echo '<hr>';
// 2. کستینگ (تبدیل نوع دستی)
$form_input_age = "25"; // ورودی از فرم همیشه رشته است
$age_as_int = (int)$form_input_age;
var_dump($age_as_int); // int(25)
echo '<hr>';
// 3. توابع کار با رشته
$raw_text = "welcome to the world of php programming!";
echo "Original: " . $raw_text . "<br>";
$replaced_text = str_replace("world", "amazing universe", $raw_text);
echo "Replaced: " . $replaced_text . "<br>";
echo '<hr>';
// 4. مشکل اعداد اعشاری و راهکار
$total = 144.84000000000003; // یک محاسبه فرضی
$formatted_total = number_format($total, 2, '.', '');
echo "Formatted total for user: $" . $formatted_total . "<br>";
?>
تمرین شما
صورت تمرین:
۱. یک متغیر رشتهای تعریف کنید: $user_bio = " i am a student at a high school and i love php. "; یک اسکریپت بنویسید که:
- فضاهای خالی اضافی در ابتدا و انتهای رشته را با جستجو و یافتن تابع
trim()حذف کند. - حرف اول جمله را با تابع
ucfirst()بزرگ کند. - کلمه "php" را با "PHP" جایگزین کند.
- در نهایت، رشته تمیز شده را به همراه طول آن چاپ کند.
۲. دو متغیر
$str_num = "5" و $int_num = 5 تعریف کنید و با استفاده از `if/else` و مقایسههای == و ===، نشان دهید که چرا یکی برابر و دیگری غیر یکسان است.
باشگاه ذهن: یک چالش برای هوش مصنوعی
چالش شما: شما با str_replace() آشنا شدید. در دنیای واقعی، برای یافتن الگوهای پیچیده (مثل ایمیل) از "عبارات باقاعده" (Regular Expressions) و توابع preg_* استفاده میشود.
این پرامپت را به ابزار هوش مصنوعی خود بدهید:
تفاوت اصلی بین `str_replace()` و `preg_replace()` در PHP چیست؟ برای هر کدام یک مثال ساده بزن که این تفاوت را نشان دهد. به طور خلاصه توضیح بده که چه زمانی باید از `str_replace()` (به دلیل سرعت) و چه زمانی از `preg_replace()` (به دلیل قدرت) استفاده کرد.