سطح C: جراحی رشته‌ها و کنترل دقیق انواع

در این سطح پیشرفته، ما کنترل بیشتری روی داده‌ها به دست می‌آوریم. یاد می‌گیریم که چگونه به صورت دستی انواع را تغییر دهیم، مقایسه‌های دقیق‌تری انجام دهیم و با توابع قدرتمند، رشته‌ها را دستکاری کنیم.

محتوای آموزشی

۱. مقایسه نرم (==) در مقابل مقایسه سخت (===)

مقایسه نرم (==): فقط مقدارها را مقایسه می‌کند و سعی در تبدیل نوع دارد. ("123" == 123 نتیجه‌اش true است).
مقایسه سخت (===): هم مقدار و هم نوع داده را مقایسه می‌کند. ("123" === 123 نتیجه‌اش false است).
قانون طلایی: همیشه و تا جای ممکن از مقایسه سخت (===) استفاده کنید.

۲. کستینگ (Casting): تبدیل نوع دستی

گاهی ما می‌خواهیم به صورت صریح نوع یک متغیر را تغییر دهیم. این کار با قرار دادن نوع جدید داخل پرانتز قبل از متغیر انجام می‌شود: (int)$var, (string)$var, (bool)$var.

۳. توابع پیشرفته برای کار با رشته‌ها

۴. مشکل دقت در اعداد اعشاری (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()` (به دلیل قدرت) استفاده کرد.