تابع clamp به PHP 8.6 اضافه میشه
خلاصهٔ کاملتر
به نوشتهٔ این مقاله، تابع clamp یکی از اضافهشدههای PHP 8.6 هست که بر اساس RFC مربوط به خودش پذیرفته شده و قراره نوامبر 2026 منتشر بشه. کارش سادهست: یه مقدار رو میگیره و مطمئن میشه از یه کف و سقف مشخص بیرون نزنه. نویسنده میگه این دقیقاً همون چیزیه که موقع اعتبارسنجی ورودی کاربر یا محاسبات مدام لازم میشه.
تابع سهتا پارامتر میگیره: value یعنی مقداری که میخوای محدودش کنی، min کف بازه و max سقف بازه.
clamp(value: 50, min: 10, max: 100); // 50
clamp(value: 9, min: 10, max: 100); // 10
clamp(value: 101, min: 10, max: 100); // 100اگه مقدار داخل بازه باشه همونطور که هست برمیگرده، اگه پایینتر از کف باشه خود min و اگه بالاتر از سقف باشه خود max برگردونده میشه.
پیادهسازی زیر پوستهٔ clamp چیز پیچیدهای نیست و فقط با عملگرهای < و > مقایسه میکنه. همین باعث میشه محدود به عدد نباشه و با هر تایپی که این دو عملگر رو پشتیبانی کنه کار کنه: int، float، رشته و حتی بعضی آبجکتها. برای رشتههای غیرعددی مقایسه بهصورت lexicographic یا همون ترتیب الفبایی دیکشنری انجام میشه، کاراکتر به کاراکتر؛ و اگه یه رشته پیشوند اون یکی باشه، کوتاهتره که کوچکتر حساب میشه.
آبجکتها هم تا وقتی این دو عملگر رو پشتیبانی کنن قابل clamp کردنن؛ نویسنده مثال DateTime و DateTimeImmutable رو میزنه که باهاشون میشه یه تاریخ رو داخل یه بازهٔ زمانی نگه داشت. برای پروژههایی که هنوز روی نسخههای قدیمیتر PHP هستن هم راه هست: ترکیب تودرتوی min و max، یا اگه لاراول کار میکنی هلپر Number::clamp که همین الان در دسترسه.
نکات کلیدی:
- clamp یه تابع داخلی جدید تو PHP 8.6 هست و با RFC مربوط به خودش پذیرفته شده
- سه پارامتر value، min و max میگیره و مقدار خارج از بازه رو به نزدیکترین مرز میچسبونه
- چون فقط با < و > مقایسه میکنه، با عدد، رشته و آبجکتهای قابل مقایسه کار میکنه
- رشتههای غیرعددی lexicographic مقایسه میشن، مثل ترتیب کلمات تو دیکشنری
- قبل از 8.6 میشه با min و max تودرتو یا Number::clamp لاراول همین کارو کرد




