في هذا الدرس 6تصفّح المواضيع
تقوم الدالة ceil() دائماً بتقريب العدد للأعلى إلى أقرب عدد صحيح، بينما تقوم الدالة floor() دائماً بتقريب العدد للأسفل إلى أقرب عدد صحيح.
- تُرجع كل من
ceil()وfloor()قيمة من نوعfloatفي PHP؛ لذا حوّل الناتج بـ(int)عندما تحتاج نوعاً صحيحاً. - حساب إجمالي صفحات التقسيم الصفحي يستخدم دائماً
(int) ceil($totalItems / $perPage)لضمان صفحة للعناصر المتبقية. - مع الأعداد السالبة، تقرب
ceil(-3.7)للأعلى باتجاه الصفر (-3.0)، بينما تقربfloor(-3.2)للأسفل بعيداً عن الصفر (-4.0).
قسمة 43 / 10 تنتج 4.3، وتقوم ceil() بتقريبها للأعلى إلى 5 صفحات لعرض العناصر الثلاثة الأخيرة.
<?php
$totalItems = 43;
$perPage = 10;
$totalPages = (int) ceil($totalItems / $perPage);
echo "Pages needed: $totalPages\n";
echo "ceil(4.1) = " . ceil(4.1) . " | floor(4.9) = " . floor(4.9) . "\n";
echo "ceil(-3.7) = " . ceil(-3.7) . " | floor(-3.2) = " . floor(-3.2) . "\n";
تقوم الدالة round($num, $precision, $mode) بتقريب العدد لعدد محدد من الخانات العشرية مع التحكم الكامل في كيفية معالجة القيم النصفية (.5).
- الوضع الافتراضي
PHP_ROUND_HALF_UPيقرب النصفي بعيداً عن الصفر (يقرب2.5إلى3). - الوضع
PHP_ROUND_HALF_DOWNيقرب القيمة النصفية باتجاه الصفر (يقرب2.5إلى2). - الوضع المصرفي
PHP_ROUND_HALF_EVENيقرب القيم النصفية لأقرب رقم زوجي (كل من1.5و2.5يقربان إلى2) لمنع الانحياز الإحصائي في المحاسبة.
لاحظ كيف يقرب الوضع المصرفي PHP_ROUND_HALF_EVEN كلاً من 1.5 و2.5 إلى العدد الزوجي الأقرب 2.
<?php
$taxAmount = 14.3786;
echo "2 decimals: " . round($taxAmount, 2) . "\n";
echo "HALF_UP (2.5): " . round(2.5, 0, PHP_ROUND_HALF_UP) . "\n";
echo "HALF_DOWN (2.5): " . round(2.5, 0, PHP_ROUND_HALF_DOWN) . "\n";
echo "HALF_EVEN (1.5): " . round(1.5, 0, PHP_ROUND_HALF_EVEN) . "\n";
echo "HALF_EVEN (2.5): " . round(2.5, 0, PHP_ROUND_HALF_EVEN) . "\n";
تُرجع القسمة العادية / في PHP عدداً عشرياً float عند وجود باقٍ؛ لذا استخدم intdiv($a, $b) للحصول على خارج القسمة الصحيح مباشرة، وfmod($x, $y) لباقي القسمة العشرية.
- تُرجع
intdiv(130, 60)العدد الصحيحint(2)مباشرة، وهي مثالية لتحويل الثواني إلى دقائق وساعات. - يحول معامل باقي القسمة
%طرفيه إلى أعداد صحيحة، بينما تحافظ الدالةfmod(5.7, 1.2)على الكسور العشرية. - القسمة على صفر في
intdiv($a, 0)تطلق خطأDivisionByZeroError.
تُرجع intdiv(195, 60) العدد الصحيح 3 دقائق ويعطي 195 % 60 الباقي 15 ثانية، بينما تحسب fmod(5.7, 1.2) الباقي العشري 0.9.
<?php
$totalSeconds = 195;
$minutes = intdiv($totalSeconds, 60);
$seconds = $totalSeconds % 60;
$floatRem = round(fmod(5.7, 1.2), 2);
echo "Duration: {$minutes}m {$seconds}s\n";
echo "fmod(5.7, 1.2) = $floatRem\n";
تعالج الدوال المدمجة abs() وmin() وmax() وsqrt() ومعامل الأسس ** حساب المسافات وتقييد الحدود والجذور التربيعية بسهولة.
- تُرجع
abs($n)القيمة المطلقة الموجبة للعدد الصحيح أو العشري (مثلاًabs(-42)تُرجع42). - دمج
min(100, max(0, $score))يحصر أي رقم ضمن النطاق0..100مباشرة بدون جمل شرطية! - تُرجع
sqrt(81)الجذر التربيعيfloat(9)، ويحسب المعامل2 ** 10القيمة1024.
تحول abs(120 - 175) الناتج -55 إلى 55، وتقيد min(100, max(0, 118)) الدرجة عند السقف 100، وتحسب sqrt() الوتر 5.
<?php
$delta = abs(120 - 175);
$rawScore = 118;
$clamped = min(100, max(0, $rawScore));
$hypotenuse = sqrt((3 ** 2) + (4 ** 2));
echo "Delta: $delta | Clamped: $clamped\n";
echo "Hypotenuse: $hypotenuse\n";
استخدم دائماً دوال التوليد العشوائي الآمن تشفيرياً (CSPRNG) في PHP وهي random_int($min, $max) وrandom_bytes($length) لتوليد رموز التحقق والتوكنات الأمنية.
- تولّد
random_int(100000, 999999)عدداً صحيحاً من 6 أرقام غير قابل للتوقع وآمن تشفيرياً. - تولّد
bin2hex(random_bytes(8))ثمانية بايتات عشوائية آمنة وتحولها إلى سلسلة ست عشرية طولها 16 حرفاً. - الدوال القديمة
rand()وmt_rand()قابلة للتنبؤ حسابياً ولا يجوز استخدامها أبداً في رموز التحقق أو التوكنات.
تضمن random_int(100000, 999999) رقماً صحيحاً شاملاً للحدين، وتضاعف bin2hex(random_bytes(8)) عدد البايتات الثمانية لتنتج 16 حرفاً ست عشرياً.
<?php
$otpCode = random_int(100000, 999999);
$tokenHex = bin2hex(random_bytes(8));
var_dump($otpCode >= 100000 && $otpCode <= 999999);
echo "Token length: " . strlen($tokenHex) . "\n";
استخدم هذا الجدول المرجعي لاختيار دالة التقريب أو القسمة أو التوليد العشوائي المناسبة لعمليتك الحسابية.
- تذكر أن
ceil()وfloor()وround()تُرجع جميعاً نوعاً عشرياًfloat، بينما تُرجعintdiv()وrandom_int()عدداً صحيحاًint. - استخدم
PHP_ROUND_HALF_EVENللتقريب المحاسبي الإحصائي وPHP_ROUND_HALF_UPللعرض التجاري المعتاد. - تذكر قاعدة
bin2hex(random_bytes($n)): تمرير$nبايت ينتج دائماً سلسلة نصية طولها$n * 2حرفاً.
لتوزيع 25 عنصراً في صناديق تسع 6 عناصر، تعطي intdiv(25, 6) عدد الصناديق الممتلئة بالكامل (4)، وتعطي ceil() إجمالي الصناديق اللازمة (5).
| الدالة | نوع النتيجة | ملخص السلوك | مثال النتيجة |
|---|---|---|---|
ceil($num) | float | Rounds UP toward +infinity | ceil(4.1) -> 5.0 |
floor($num) | float | Rounds DOWN toward -infinity | floor(4.9) -> 4.0 |
round($num, $p, $mode) | float | Rounds to $p decimals using $mode | round(2.5) -> 3.0 |
intdiv($a, $b) | int | Truncated integer quotient of $a / $b | intdiv(17, 5) -> 3 |
fmod($x, $y) | float | Floating-point modulo remainder | fmod(5.7, 1.2) -> 0.9 |
random_int($min, $max) | int | CSPRNG inclusive random integer | 100000..999999 |
<?php
$items = 25;
$boxSize = 6;
$fullBoxes = intdiv($items, $boxSize);
$totalBoxes = (int) ceil($items / $boxSize);
echo "Full boxes: $fullBoxes | Total boxes: $totalBoxes\n";
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
استخدم هذا الجدول المرجعي لاختيار دالة التقريب أو القسمة أو التوليد العشوائي المناسبة لعمليتك الحسابية. تذكر أن ceil() وfloor() وround() تُرجع جميعاً نوعاً عشرياً float، بينما تُرجع intdiv() وrandom_int() عدداً صحيحاً int. استخدم PHP_ROUND_HALF_EVEN للتقريب المحاسبي الإحصائي وPHP_ROUND_HALF_UP للعرض التجاري المعتاد. تذكر قاعدة bin2hex(random_bytes($n)): تمرير $n بايت ينتج دائماً سلسلة نصية طولها $n * 2 حرفاً.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Rounding & CSPRNG التقريب والعشوائية الآمنة
- تحكم في أوضاع تقريب الكسور بـ round وceil وfloor، واحسب القسمة الصحيحة بـ intdiv وfmod، وولّد أرقاماً عشوائية آمنة بـ random_int.
- للمراجعة
- 02 ceil and floor Directional Rounding التقريب للأعلى بـ ceil وللأسفل بـ floor
- المفهوم الأساسي لقسم التقريب للأعلى بـ ceil وللأسفل بـ floor في لغة PHP الحديثة.
- للمراجعة
- 03 Precision and Modes in round التحكم في الدقة وأوضاع التقريب الأربعة في round
- الصياغة البرمجية والتطبيق العملي المباشر لقسم التحكم في الدقة وأوضاع التقريب الأربعة في round.
- للمراجعة
- 04 Integer Division and Float Modulo القسمة الصحيحة intdiv وباقي القسمة العشرية fmod
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم القسمة الصحيحة intdiv وباقي القسمة العشرية fmod.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PHP PHP
- PHP: Hypertext Preprocessor
- لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
- للمراجعة
- 02 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
- للمراجعة
- 03 FPM FPM
- FastCGI Process Manager
- مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
- للمراجعة
- 04 HTML HTML
- HyperText Markup Language
- لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم التقريب للأعلى بـ ceil وللأسفل بـ floor للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم التحكم في الدقة وأوضاع التقريب الأربعة في round وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما هو نوع البيانات الذي تُرجعه الدوال ceil() و floor() و round() في PHP؟
تُرجع دوال التقريب الثلاث دائماً قيمة من نوع float، ويمكن تحويلها بـ (int) عند الحاجة.
ما نتيجة استدعاء كل من ceil(-3.2) و floor(-3.2) في PHP؟
على خط الأعداد يكون -3 أكبر من -3.2 (لأعلى)، ويكون -4 أصغر من -3.2 (لأسفل).
ماذا تُرجع الدالة round(2.5, 0, PHP_ROUND_HALF_EVEN)؟
يقرب وضع PHP_ROUND_HALF_EVEN القيمة النصفية 2.5 إلى الرقم الزوجي الأقرب وهو 2.
أي دالة تُرجع خارج القسمة الصحيح مباشرة لعملية قسمة 17 على 5 (وهو int(3))؟
تنفذ intdiv(17, 5) القسمة الصحيحة وتُرجع العدد الصحيح int(3).
لماذا يجب استخدام الدالة fmod(5.7, 1.2) بدلاً من المعامل 5.7 % 1.2 لحساب باقي قسمة الأعداد العشرية؟
المعامل % مخصص للأعداد الصحيحة فقط في PHP، بينما تتعامل fmod() مع الكسور العشرية بدقة.
كم حرفاً ست عشرياً (Hexadecimal) تُرجعه العبارة bin2hex(random_bytes(16))؟
كل بايت يتحول إلى حرفين في النظام الست عشري، فيصبح 16 بايت مساوياً لـ 32 حرفاً.
أي دالة يجب استخدامها لتوليد رمز تحقق عشوائي آمن تشفيرياً (OTP) مكون من 6 أرقام في PHP؟
تعتمد random_int() على مولد نظام التشغيل التشفيري الآمن CSPRNG.
ما ناتج تقييم العبارة min(100, max(0, -15))؟
هذا التعبير يقيد أي رقم ليبقى داخل النطاق المغلق من 0 إلى 100.