ویژگی تصویر

تابع boolval() در PHP

  /  PHP   /  تابع boolval() در PHP
بنر تبلیغاتی الف
آموزش PHP

تابع boolval() در PHP برای تبدیل هر مقدار به نوع بولی (true یا false) استفاده می‌شود. این تابع از نسخهٔ PHP 5.5 به بعد در هستهٔ زبان اضافه شده و معادل معنایی با عملگر تبدیل (casting) به (bool) دارد. در ادامه کاربردها، رفتارهای ویژه، مثال‌های واقعی و نکات بهینه‌سازی را بررسی می‌کنیم.

سینتکس و مقدار بازگشتی

  • bool boolval(mixed $var)
  • ورودی: هر نوع داده‌ای (عدد، رشته، آرایه، شیء، null و …)
  • خروجی: مقدار بولی true یا false

مقایسهٔ سریع: boolval() در برابر (bool)

روشتوضیحمثال
boolval($x)تابع قابل خواندن و قابل ارسال به callbackboolval('0') → false
(bool)$xعملگر تبدیل (fast & concise)(bool)[] → false
filter_var(..., FILTER_VALIDATE_BOOLEAN)تبدیل رشته‌های متنی مانند “true”,”false”,”yes”,”no” بصورت منطقیfilter_var('false', FILTER_VALIDATE_BOOLEAN) → false

مقادیر truthy و falsy در PHP

در PHP برخی مقادیر به‌طور پیش‌فرض «درستی» یا «نادرستی» مشخصی دارند. شناخت این مقادیر برای استفادهٔ صحیح از boolval() ضروری است:

  • Falsy (به false تبدیل می‌شوند): false, 0, 0.0, "" (رشتهٔ خالی), "0", [] (آرایهٔ خالی), null
  • سایر مقادیر (مانند "false", "no", اشیاء، آرایه‌های غیرخالی، اعداد غیرصفر) به true تبدیل می‌شوند.

مثال‌های عملی

<?php
$values = ['0', '', 'false', 0, 1, [], ['a'], null];

foreach ($values as $v) {
    var_dump($v, boolval($v));
}
?>

در این کد، هر مقدار ابتدا چاپ شده و سپس نتیجهٔ boolval() آن نمایش داده می‌شود. توجه کنید که رشتهٔ "false" مقدار غیرخالی است و بنابراین به true تبدیل می‌شود، در حالی که رشتهٔ "0" به false تبدیل می‌شود.

توضیح فارسی دربارهٔ کد بالا

این حلقه مقادیر مختلف را در یک آرایه بررسی می‌کند و با استفاده از var_dump مقدار اصلی و نتیجهٔ تبدیل بولی آن را نشان می‌دهد. این مثال به‌خوبی تفاوت بین رشته‌های خالی/رشتهٔ “0” و رشتهٔ “false” را نشان می‌دهد.

موارد استفادهٔ رایج و نکات عملی

  • خواندن مقادیر بولی از فرم‌ها یا APIها: با این‌که boolval($_POST['active']) سریع و ساده است، مراقب باشید چون رشتهٔ "false" برابر true خواهد بود.
  • استفاده در توابع مرتبه‌بالا: می‌توان 'boolval' را به‌عنوان callback در array_map یا array_filter استفاده کرد.
  • اعلان نوع صریح در توابع: در PHP 7+ می‌توانید نوع خروجی را : bool مشخص کنید تا تابع همیشه مقدار بولی بازگرداند.

نمونه: تبدیل تمامی عناصر آرایه به بولی

<?php
$raw = ['', '0', '1', 'hello', 0, 2];
$bools = array_map('boolval', $raw);
var_export($bools);
?>

این کد با array_map، تابع boolval را روی هر عنصر اعمال می‌کند و آرایه‌ای از مقادیر بولی تولید می‌کند. کاربرد مفیدی برای پردازش داده‌های ورودی است.

زمانی که boolval کافی نیست — استفاده از filter_var

اگر می‌خواهید رشته‌های متنی مانند "false", "no", "0", "true", "yes" را طبق معنای انسانی به بولی تبدیل کنید، بهتر است از filter_var با فِلَگ‌های مخصوص استفاده کنید:

<?php
$input = 'false';
$boolean = filter_var($input, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
// $boolean === false
?>

در این مثال filter_var رشتهٔ 'false' را به false تبدیل می‌کند و اگر مقدار نامعلومی باشد، با گزینهٔ FILTER_NULL_ON_FAILURE مقدار null بازمی‌گرداند.

توضیح کاربردی و پیشنهادات امنیتی

  • در ورودی‌های کاربر، همیشه تصریح کنید که چه مقادیری مجازند و از filter_var برای تبدیل مقادیر متنی استفاده کنید تا خطاهای منطقی پیش نیاید.
  • برای مقایسهٔ دقیق‌تر از === استفاده کنید تا از تفاوت بین رشته و بول جلوگیری شود.
  • اگر بهینه‌سازی بسیار حساس به عملکرد دارید، تبدیل با عملگر (bool) کمی سریع‌تر از فراخوانی تابع است، اما در اغلب موارد تفاوت قابل‌توجهی وجود ندارد.

نمونهٔ تابع با اعلان نوع خروجی

<?php
function isActive($value): bool {
    // تبدیل صریح به بولی
    return (bool)$value;
}
?>

تابع بالا هر ورودی‌ای را به بولی تبدیل کرده و تضمین می‌کند که نوع خروجی یک boolean واقعی باشد. این شیوه خوانایی و ایمنی کد را افزایش می‌دهد.

آمادگی برای خطاها و رفتار غیرمنتظره

همیشه به این نکته توجه کنید که بعضی مقادیر ممکن است برخلاف تصور شما تبدیل شوند. نمونهٔ رایج: پارامترهای GET یا POST همیشه رشته هستند؛ بنابراین '0' ممکن است به false تبدیل شود و 'false' به true. اگر نیاز دارید معانی انسانی مثل “true”/”false” رعایت شوند، از filter_var استفاده کنید.

خلاصه و جمع‌بندی

  • boolval() تابعی ساده و مفید برای تبدیل مقدار به boolean است.
  • رفتار آن مطابق قوانین truthy/falsy در PHP است؛ آگاه باشید که رشتهٔ “false” ارزش منطقی true دارد.
  • برای تفسیر رشته‌های متنی به‌صورت منطقی و انسانی، از filter_var استفاده کنید.
  • در سناریوهای حساس به عملکرد، تبدیل با (bool) کمی سریع‌تر است، اما از نظر خوانایی boolval() مناسب است.

با درک دقیق این موارد می‌توانید از boolval() و روش‌های مرتبط به‌صورت ایمن و مؤثر در کدهای PHP خود استفاده کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: