طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 132 · تقنيات تطوير الواجهات الخلفية
الدرس 3 · الوحدة 1: تطوير المنطق لمعالجة الطلبات

أساسيات PHP: المصفوفات والشروط والحلقات

ما تعرفه من بايثون وJavaScript، بصياغة PHP، لبناء الصفحات من البيانات. ⏱ نحو 30 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تستخدم العمليات الحسابية والمقارنة، وتميّز == من ===.
  • تكتب الشروط بـ if و elseif و else، وتستخدم ?: و ??.
  • تنشئ المصفوفات المفهرسة والترابطية وتتعامل معها.
  • تمر على المصفوفات بـ foreach لتوليد HTML من البيانات.

١العمليات والمقارنة

العمليات الحسابية كما تعرفها: + - * / % و ** للأس. والجديد في PHP نوعان من المساواة:

<?phpvar_dump(10 / 4);       // القسمة تعطي عشريًّا عند الحاجةvar_dump(intdiv(10, 4)); // قسمة صحيحةvar_dump(10 % 4);       // باقي القسمةvar_dump("5" == 5);     // مساواة بالقيمة فقطvar_dump("5" === 5);    // مساواة بالقيمة والنوعvar_dump(5 != 3 && 2 < 1);
العاملالمعنىمثال
==متساويان في القيمة بعد تحويل النوع"5" == 5 ← true
===متساويان في القيمة والنوع معًا (المساواة الصارمة)"5" === 5 ← false
!= و !==عكس السابقين"5" !== 5 ← true
&& و || و !و، أو، ليس (ويجوز and و or)$age >= 18 && $ok

٢الشروط: if و elseif و else

الصياغة قريبة من JavaScript: الشرط بين قوسين، والكتلة بين قوسين معقوفين. ولاحظ أن PHP يكتبها elseif كلمة واحدة:

<?php$score = 83; if ($score >= 90) {    $grade = "ممتاز";} elseif ($score >= 80) {    $grade = "جيد جدًّا";} elseif ($score >= 60) {    $grade = "ناجح";} else {    $grade = "راسب";}echo "<p>درجتك $score: <b>$grade</b></p>";

واختصاران ستراهما كثيرًا في الواجهات الخلفية:

<?php$stock = 0;// العامل الثلاثي: شرط ? قيمة إن صح : قيمة إن خطأecho $stock > 0 ? "متوفر" : "نفد من المخزون";echo "\n"; // عامل الدمج مع null: خذ القيمة إن وُجدت، وإلا فالبديل$city = null;echo $city ?? "غير محددة";

العامل ?? مهم جدًّا: سنستخدمه مع كل حقل يصل من الطلب، لأن المستخدم قد لا يرسله أصلًا.

٣المصفوفات المفهرسة

المصفوفة Array في PHP تقابل القائمة list في بايثون. تُكتب بين قوسين مربعين، وتبدأ فهارسها من الصفر:

<?php$drinks = ["قهوة", "شاي", "عصير"]; echo $drinks[0] . "\n";        // أول عنصرecho count($drinks) . "\n";    // عدد العناصر $drinks[] = "حليب";             // أضف عنصرًا في النهايةprint_r($drinks);

٤المصفوفات الترابطية: مفتاح ← قيمة

أحيانًا نريد الوصول للقيمة باسمها لا برقمها، مثل القاموس dict في بايثون. هذه المصفوفة الترابطية، وتُكتب بالسهم =>:

<?php$student = [    'name'  => 'نورة القحطاني',    'major' => 'تقنية البرمجة',    'hours' => 15,]; echo $student['name'] . "\n";$student['city'] = 'الرياض';    // مفتاح جديدecho count($student) . "\n";print_r($student);

انتبه لهذا النوع جيدًا: كل ما يصل الخادم من الطلب يصلك مصفوفة ترابطية. فالمصفوفات $_GET و $_POST و $_SESSION في الدروس القادمة كلها من هذا النوع.

٥الحلقات: for و while و foreach

for و while كما في JavaScript. أما foreach فهي الأكثر استخدامًا: تمر على كل عنصر في المصفوفة، مثل for x in list في بايثون:

<?php$drinks = ["قهوة", "شاي", "عصير"]; echo "<ul>";foreach ($drinks as $d) {    echo "<li>$d</li>";}echo "</ul>"; // مع المفتاح أيضًا$prices = ['قهوة' => 12, 'شاي' => 8];foreach ($prices as $item => $price) {    echo "<p>$item: $price ريال</p>";} for ($i = 1; $i <= 3; $i++) {    echo "<span>نجمة $i ⭐ </span>";}

لاحظ ما حدث: الكود لم يطبع نصًّا عاديًّا، بل بنى HTML من البيانات. هذه هي الوظيفة اليومية للواجهة الخلفية.

٦من البيانات إلى صفحة: جدول المنتجات

في التطبيقات الحقيقية تأتي البيانات مصفوفةً من الصفوف، كل صف مصفوفة ترابطية (كما ستعيدها قاعدة البيانات لاحقًا). ونبني منها جدول HTML بأسلوب القالب: foreach (…): ثم endforeach; ، وهي صياغة بديلة أوضح داخل HTML:

<?php$products = [    ['name' => 'قهوة عربية', 'price' => 35, 'stock' => 12],    ['name' => 'عسل سدر',    'price' => 120, 'stock' => 0],    ['name' => 'تمر سكري',   'price' => 45, 'stock' => 30],    ['name' => 'شاي أخضر',   'price' => 18, 'stock' => 7],];?><table border="1" cellpadding="6">  <tr><th>المنتج</th><th>السعر</th><th>الحالة</th></tr>  <?php foreach ($products as $p): ?>  <tr>    <td><?= $p['name'] ?></td>    <td><?= $p['price'] ?> ريال</td>    <td><?= $p['stock'] > 0 ? 'متوفر' : 'نفد' ?></td>  </tr>  <?php endforeach; ?></table><p>عدد المنتجات: <?= count($products) ?></p>

أضف منتجًا خامسًا إلى المصفوفة في المختبر (✏️ جرّب وعدّل) وشغّل: يظهر صف جديد في الجدول دون أن تلمس HTML. وحين نربط قاعدة البيانات في الوحدة 9 لن يتغير القالب أبدًا؛ سيتغير فقط مصدر المصفوفة.

توقّع وتحقّق

قيمة "7" === 7 هي:

القيمة نفسها لكن النوع مختلف: نص وعدد.

$x ?? "لا شيء" تعطي «لا شيء» إذا كان $x:

عامل الدمج مع null.

عدد عناصر المصفوفة $a:

count في PHP.

أي حلقة أنسب للمرور على كل عناصر مصفوفة؟

foreach ($a as $x)

الخلاصة

تحدٍّ برمجي: قائمة المنتجات المتوفرة

متوسط

متجر الواحة يريد صفحة تعرض المنتجات المتوفرة فقط (المخزون أكبر من صفر) في قائمة نقطية، مع سعر كل منتج، وفي آخرها عدد المنتجات المتوفرة.

المطلوب:
  • المصفوفة $products جاهزة في الكود، فلا تغيّرها.
  • اطبع قائمة <ul> فيها لكل منتج متوفر عنصر بالشكل: <li>قهوة عربية: 35 ريال</li>
  • بعد القائمة اطبع: <p>المتوفر: 3 منتجات</p> (احسب العدد بالكود، لا تكتبه بيدك).
  • استخدم foreach و if.
👀 اعرض الاستجابة المطلوبة
✓ التحقق الآلي: يرسل المختبر هذه الطلبات إلى خادمك بالترتيب ثم يفحص الاستجابات
  1. GET /products.php
  • الكود يعمل بلا أخطاء أو تحذيرات
  • قائمة فيها المنتجات الثلاثة المتوفرة بالشكل المطلوب
  • عسل السدر (نفد) لا يظهر
  • العناصر داخل <ul> … </ul>
  • السطر الأخير: المتوفر: 3 منتجات
  • استخدمت foreach و if
  • العدد 3 محسوب بالكود لا مكتوب باليد

💡 تلميح 1
ابدأ بعدّاد $count = 0; وزده داخل الشرط: $count++;
💡 تلميح 2
داخل علامتي التنصيص المزدوجتين اكتب العنصر هكذا: "{$p['name']}"

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

<?php$products = [    ['name' => 'قهوة عربية', 'price' => 35, 'stock' => 12],    ['name' => 'عسل سدر',    'price' => 120, 'stock' => 0],    ['name' => 'تمر سكري',   'price' => 45, 'stock' => 30],    ['name' => 'شاي أخضر',   'price' => 18, 'stock' => 7],]; $count = 0;echo "<ul>";foreach ($products as $p) {    if ($p['stock'] > 0) {        echo "<li>{$p['name']}: {$p['price']} ريال</li>";        $count++;    }}echo "</ul>";echo "<p>المتوفر: $count منتجات</p>";
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس