السلام عليكم... جماعة هو لي في الصورة الأولي طلع Not found وفي تاني صورة طلع 0 مع انهم نفس بعض
Problem
دالة strpos تبحث عن أول ظهور لسلسلة نصية في سلسلة نصية أخرى، وفي حال تم العثور على السلسلة، فإنها تعيد الموقع الذي تم العثور عليه (يبدأ من 0)، وإذا لم يتم العثور على الحرف، فإنها تعيد false.
الفرق بين الكودين هو في كيفية فحص إذا ما كان تم العثور على الحرف أم لا.
في الكود الأول:
الشرط يتحقق إذا كان $position غير صفر أو false من خلال الجملة if، وإن كان $position هو 0 (الموقع الذي تم العثور عليه)، فإن الشرط يعتبر صحيحًا ويتم عرض 0.
بمعنى أن 0 في البرمجة تعتبر false أيضًا وبالتالي لن يتم تنفيذ الكود في في الجملة if وسيتم تنفيذه في else، لذلك عليك تعديل الشرط ليصبح كالتالي:
<?php $str = 'To do or not to do'; $position = strpos($str, 'To'); if ($position === 0 || $position) { echo $position; } else { echo 'Not found'; }
لكن من الأفضل استخدام طريقة الكود الثاني.
ففي الكود الثاني:
يتم فحص بشكل صارم مع !== للتأكد من أن $position ليس false بشكل كامل أي المقارنة مع false فقط، وبالتالي في حال كان $position هو 0 سيتم طباعة القيمة، والشرط لن يعتبر كاذبًا، وبالتالي يتم عرض 0.
أي تقع السلسلة To في السلسلة النصية؟ في البداية صحيح في الموضع 0.
إذن سيعود بقيمة 0، وقيمة 0 هي قيمة كاذبة falsy في لغات البرمجة، لذلك لن يتم تنفيذ الكود في الجملة if لأنه يتم تنفيذها فقط في حال كان الشرط يحقق true هنا:
if ($position) { echo $position; } else { echo 'Not found'; }
بينما في الكود الثاني وضعنا في الجملة الشرطية، شرط يتحقق مما إذا كانت القيمة العائدة هي False وهي ليست كذلك بل 0 لذلك يعتبر الشرط true وسيتم تنفيذ الكود والطباعة هنا:
if ($position !== false) { echo $position; // 0 } else { echo 'Not found'; }
ستحتاج إلى قراءة المقال التالي لفهم الأمر:
الكود الأول:
if ($position !== false) {
يستخدم `!==` لفحص إذا كانت القيمة مختلفة تمامًا عن `false`. إذا كان `$position` يحتوي على القيمة `0`، فإن الشرط سيكون صحيحًا وستظهر النص "0".
الكود الثاني:
if ($position) {
هنا يتم استخدام القيمة المنطقية لـ `$position` لتحقق من إذا كانت القيمة غير فارغة أو غير مساوية للقيمة `0`. في هذه الحالة، إذا كان `$position` يحتوي على القيمة `0`، فإن الشرط سيكون غير صحيح وستظهر الرسالة "Not found" وذلك لأن القيمة 0 تتحول إلى false لذلك إذا استخدمت do بدلاً To
$position = strpos($str, 'do');
ستجد أنه لا يتم طباعة Not found
التعليقات