تخطَّ إلى المحتوى

المتغيرات وأنواع البيانات في PHP

الدرس 2 من 12 · PHP

كل برنامج يتعامل مع بيانات: اسم المستخدم، وسعر المنتج، وعدد الطلاب. وحتى يتذكر البرنامج هذه البيانات ويستخدمها، يحفظها في متغيرات. في هذا الدرس ستتعلم كيف تنشئ المتغيرات في PHP، وما أنواع البيانات التي تخزنها، وكيف تدمج النصوص بطريقة صحيحة.

المتغير (Variable) مثل علبة عليها ملصق باسم: تضع بداخلها قيمة، وكلما احتجت القيمة تنادي العلبة باسمها. وفي PHP كل متغير يبدأ بعلامة الدولار $:

<?php
$name = "سارة";
$age = 14;
echo $name;
  • $name: اسم المتغير.
  • =: علامة الإسناد (Assignment)، وتعني «ضع القيمة التي على اليمين داخل المتغير».
  • لا تحتاج كلمة خاصة لتعريف المتغير مثل let في JavaScript؛ يكفي أن تسند له قيمة.
  • يبدأ بـ $ ثم حرف أو شرطة سفلية _، ولا يبدأ برقم: $age1 صحيح، و $1age خطأ.
  • لا يحتوي مسافات: استخدم $firstName أو $first_name.
  • الأحرف الكبيرة والصغيرة مختلفة: $Name و $name متغيران مختلفان.
  • اختر أسماء إنجليزية واضحة تصف المحتوى، مثل $totalPrice بدل $x.

أنواع البيانات الأساسية

Section titled “أنواع البيانات الأساسية”
<?php
$name = "سارة"; // نص (string)
$age = 14; // عدد صحيح (int)
$height = 1.55; // عدد عشري (float)
$isStudent = true; // قيمة منطقية (bool)
$phone = null; // لا قيمة (null)

لمعرفة نوع المتغير وقيمته أثناء التجربة، استخدم الدالة var_dump:

<?php
var_dump($name);
var_dump($age);
var_dump($height);
var_dump($isStudent);
var_dump($phone);
الناتج
string(8) "سارة"
int(14)
float(1.55)
bool(true)
NULL

لاحظ شيئاً طريفاً: كلمة «سارة» أربعة أحرف، لكن var_dump قالت إن طولها 8! لأن PHP تحسب البايتات لا الحروف، والحرف العربي يأخذ بايتين. ستتعلم في درس الدوال كيف تحسب الحروف العربية بشكل صحيح.

PHP لغة ديناميكية: لا تحدد نوع المتغير مسبقاً، بل تستنتجه من القيمة. ويمكن أن يتغير النوع لاحقاً:

<?php
$score = 10;
$score = "ممتاز";
echo gettype($score);
الناتج
string

علامات التنصيص: مزدوجة أم مفردة؟

Section titled “علامات التنصيص: مزدوجة أم مفردة؟”

هذا فرق مهم جداً في PHP:

<?php
$city = "القاهرة";
echo "أسكن في $city";
echo 'أسكن في $city';
الناتج
أسكن في القاهرة
أسكن في $city
  • العلامات المزدوجة "...": تبحث PHP داخلها عن المتغيرات وتضع قيمها. هذا يسمى الاستبدال (Interpolation).
  • العلامات المفردة '...': النص يُطبع كما هو حرفياً.

تخيّل العلامات المزدوجة مثل استمارة فيها خانات فارغة تمتلئ تلقائياً، والمفردة مثل صورة للاستمارة: ما فيها يبقى كما هو.

لدمج نصين أو أكثر في PHP نستخدم النقطة . وليس علامة + كما في JavaScript:

<?php
$first = "أحمد";
$last = "علي";
$full = $first . " " . $last;
echo $full;
الناتج
أحمد علي

ولإضافة نص إلى نهاية متغير موجود، استخدم .=:

<?php
$msg = "مرحباً";
$msg .= " بك";
$msg .= " يا $first";
echo $msg;
الناتج
مرحباً بك يا أحمد
<?php
$score = 10;
$score = $score + 5; // 15
$score += 3; // اختصار: $score = $score + 3
echo $score;
الناتج
18

العمليات المتاحة: + و - و * و /، و % لباقي القسمة. والاختصارات += و -= و *= و /= تعمل بنفس الطريقة.

الثابت (Constant) قيمة لا تتغير طوال تشغيل البرنامج، مثل اسم الموقع أو الحد الأقصى للطلاب. يُكتب بدون $، وبأحرف كبيرة عادةً:

<?php
const SITE_NAME = "مدرسة البرمجة";
define("MAX_STUDENTS", 30);
echo SITE_NAME . " تقبل " . MAX_STUDENTS . " طالباً في الفصل";
الناتج
مدرسة البرمجة تقبل 30 طالباً في الفصل

الطريقتان const و define تعطيان نفس النتيجة تقريباً. وإذا حاولت تغيير قيمة ثابت، ستحصل على خطأ، وهذا بالضبط ما نريده لحماية القيم المهمة.

اكتب ملف product.php فيه ثلاثة متغيرات: اسم المنتج، والسعر، وقيمة الخصم. احسب السعر النهائي في متغير رابع، ثم اطبع سطرين، واستخدم var_dump لتعرف هل السعر النهائي أكبر من 100:

<?php
$product = "كتاب";
$price = 120;
$discount = 20;
$final = $price - $discount;
echo "المنتج: $product\n";
echo "السعر بعد الخصم: $final جنيه\n";
var_dump($final > 100);
الناتج المتوقع
المنتج: كتاب
السعر بعد الخصم: 100 جنيه
bool(false)

الرمز \n يعني «سطراً جديداً» عند التشغيل من الطرفية بالأمر php product.php. أما في صفحة ويب فاستخدم <br> بدلاً منه.

  • نسيان $: كتابة name = "سارة"; تسبب خطأ. كل متغير يبدأ بـ $.
  • الدمج بعلامة +: "أهلاً " + $name لا تدمج النصوص في PHP، بل تحاول جمعها كأرقام وتعطي خطأ. استخدم النقطة ..
  • متغير داخل علامات مفردة: 'السعر: $price' يطبع اسم المتغير نفسه. استخدم العلامات المزدوجة.

سؤال

ماذا يطبع الكود: $x = 'PHP'; echo 'أتعلم $x';؟

سؤال

أي علامة تدمج نصين في PHP؟

  • المتغير يبدأ بـ $ ويُنشأ بإسناد قيمة له، والأحرف الكبيرة والصغيرة مختلفة.
  • الأنواع الأساسية: string و int و float و bool و null، و var_dump تكشف النوع والقيمة.
  • العلامات المزدوجة تستبدل المتغيرات، والمفردة تطبع النص حرفياً.
  • النقطة . لدمج النصوص، و .= للإضافة إلى نهاية النص.
  • الثوابت بـ const أو define، وتُكتب بدون $ ولا تتغير.