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

المتغيرات تشبه الصناديق المُعلمة — تضع البيانات داخل الصندوق، وتُعلق عليه علامة، ثم تستخدم هذه العلامة لاحقًا للعثور عليها. في لغة PHP، يجب أن يبدأ اسم كل متغير بـ $ — وهذه هي السمة الأكثر تميزًا في لغة PHP.

1. تعريف المتغيرات وتسميتها

يُعد تعريف المتغير في لغة PHP أمرًا بسيطًا: $ + اسم المتغير = القيمة. ولا تحتاج إلى تحديد النوع أولاً، على عكس لغتي C أو Java.

PHP
<?php
$name = "John";       // String
$age = 25;            // Integer
$height = 1.75;       // Float
$isStudent = true;    // Boolean
?>

(1) قواعد التسمية

القاعدة ✅ صحيح ❌ خطأ
يجب أن تبدأ بـ $ $name name (بدون $)
حرف أو شرطة سفلية بعد $ $name، $_name $1name، $-name
متبوعة بأحرف وأرقام وشرطات سفلية $user_id، $user2 $user-id، $user@id
التمييز بين الأحرف الكبيرة والصغيرة $name$Name
استخدم أسلوب camelCase $firstName، $userAge
💡 نصيحة: أسماء متغيرات PHP التي تبدأ بـ $ موروثة من لغة Perl. وهذا يجعل متغيرات PHP قابلة للتعرف عليها على الفور عند دمجها مع HTML.


2. أنواع البيانات الثمانية في لغة PHP

تحتوي لغة PHP على 8 أنواع أولية، مقسمة إلى ثلاث فئات:

الفئة النوع مثال الوصف
القيمة العددية string "Hello" سلسلة من الأحرف
int 42 الأعداد الصحيحة
float 3.14 الأعداد العائمة (وتُعرف أيضًا باسم double)
bool true / false القيم المنطقية
المركب array [1, 2, 3] خريطة القيم المرتبة
object new User() مثيلات الفئات
callable دالة استدعاء نوع قابل للاستدعاء
iterable قابل للتجول نوع قابل للتكرار
خاص null null لا يمثل أي قيمة
resource معرف الملف / اتصال قاعدة البيانات إشارة إلى مورد خارجي

▶ مثال: فحص أنواع المتغيرات باستخدام var_dump

PHP
<?php
$name = "John";
$age = 25;
$price = 19.99;
$isValid = true;
$nothing = null;

var_dump($name);     // string(4) "John"
var_dump($age);      // int(25)
var_dump($price);    // float(19.99)
var_dump($isValid);  // bool(true)
var_dump($nothing);  // NULL
?>
▶ جرّب الكود

3. السلاسل — الاستخدام الأساسي

PHP
<?php
$s1 = 'PHP Tutorial';       // Single quotes: literal string, no variable parsing
$s2 = "PHP Tutorial";       // Double quotes: parses variables and escape sequences

$name = "John";
echo 'Hello $name';         // Hello $name  — single quotes don't parse variables
echo "Hello $name";         // Hello John   — double quotes parse variables
?>
بناء الجملة هل يقوم بتحليل المتغيرات؟ هل يقوم بتحليل تسلسلات الهروب؟ الأنسب لـ
'Single quotes' لا \\ و\' فقط نص عادي
"Double quotes" نعم تحليل \n \t وما إلى ذلك تضمين المتغيرات

سنتعمق أكثر في موضوع السلاسل في الدرس التالي.

▶ مثال: مقارنة بين علامات الاقتباس المفردة والمزدوجة

PHP
<?php
$name = "John";

// Single quotes: output exactly as written
echo 'Hello, $name!\nNice weather today.';
// Output: Hello, $name!\nNice weather today.

// Double quotes: parse variables and escape sequences
echo "Hello, $name!\nNice weather today.";
// Output: Hello, John! (newline) Nice weather today.
?>
▶ جرّب الكود

4. الأعداد الصحيحة (int) والأعداد العائمة (float)

PHP
<?php
$decimal = 42;         // Decimal
$hex = 0x2A;           // Hexadecimal (=42)
$octal = 052;          // Octal (=42)
$binary = 0b101010;    // Binary (=42)

$float1 = 3.14;        // Float
$float2 = 1.2e3;       // Scientific notation = 1200
$float3 = 7E-10;       // Scientific notation = 0.0000000007
?>
⚠️ تحذير: لا يمكن للأرقام ذات العلامة العائمة تمثيل الكسور العشرية بدقة. القيمة 0.1 + 0.2 في لغة PHP لا تساوي 0.3 — بل تساوي شيئًا مثل 0.30000000000000004. عند التعامل مع الأموال، قم بتخزين المبالغ بالسنتات كأعداد صحيحة أو استخدم الامتداد bcmath.


5. القيم المنطقية (bool)

تتخذ القيم المنطقية قيمتين فقط: true وfalse. وهي لا تميز بين الأحرف الكبيرة والصغيرة، لكن من المعتاد استخدام الأحرف الصغيرة.

PHP
<?php
$isLogin = true;
$isAdmin = false;

if ($isLogin) {
    echo "Welcome back!";
}
?>
💡 نصيحة: يُنتج echo true القيمة 1؛ بينما يُنتج echo false سلسلة فارغة (لا يظهر شيء). استخدم var_dump() لفحص القيم المنطقية.


6. وظائف التحقق من النوع

PHP
<?php
$name = "John";
$age = 25;

var_dump(is_string($name));   // bool(true)
var_dump(is_int($age));       // bool(true)
var_dump(is_float($age));     // bool(false)
var_dump(is_bool($age));      // bool(false)
var_dump(is_array($name));    // bool(false)

// gettype() returns the type name (for debugging, not logic)
echo gettype($name);  // string
?>
الوظيفة ما يتم التحقق منه
is_string() سلسلة
is_int() عدد صحيح
is_float() عائم
is_bool() منطقية
is_array() مصفوفة
is_null() NULL
is_numeric() رقم أو سلسلة رقمية

7. تحويل الأنواع

لغة PHP هي لغة ذات أنواع غير صارمة وتقوم بتحويل الأنواع تلقائيًا. كما يمكنك إجراء التحويل بشكل صريح:

PHP
<?php
// Automatic conversion
$result = "10" + 5;         // 15 ("10" converted to number)
$text   = "10" . 5;         // "105" (5 converted to string)

// Explicit conversion
$intVal   = (int) "123";    // 123
$floatVal = (float) "3.14"; // 3.14
$strVal   = (string) 123;   // "123"
$boolVal  = (bool) 1;       // true
?>

▶ مثال: تحويل الأنواع في الممارسة العملية

PHP
<?php
// String to number
$a = (int) "42";
echo $a + 8;  // 50

// Number to string
$b = (string) 100;
echo "Price: " . $b . " yuan";  // Price: 100 yuan

// Boolean conversion rules: these values are treated as false
echo (int)((bool)0);     // 0
echo (int)((bool)"");    // 0
echo (int)((bool)[]);    // 0
echo (int)((bool)null);  // 0
// All other values are true
?>
▶ جرّب الكود
⚠️ تحذير: "0" و"" و0 و[] وnull كلها تُعتبر false في السياق المنطقي. إذا لم تتمكن من تذكر ذلك، فما عليك سوى اختبار الأمر باستخدام var_dump((bool)$x).


8. isset() و empty()

فيما يلي ثلاث من أكثر الدوال استخدامًا في PHP للتعامل مع المتغيرات:

PHP
<?php
$var1 = "Hello";
$var2 = null;

// isset(): variable is set and not null → true
var_dump(isset($var1));       // bool(true)
var_dump(isset($var2));       // bool(false)
var_dump(isset($notExist));   // bool(false) — doesn't exist

// empty(): variable is empty → true ("", 0, "0", null, false, [] are all "empty")
var_dump(empty($var1));       // bool(false) — "Hello" is not empty
var_dump(empty($var2));       // bool(true)  — null is empty
var_dump(empty(0));           // bool(true)  — 0 is considered empty!
var_dump(empty($notExist));   // bool(true)  — not existing is also considered empty
?>

▶ مثال: مقارنة بين isset و empty جنبًا إلى جنب

PHP
<?php
function testVar(string $label, mixed $value): void {
    echo "$label — isset: " . (isset($value) ? 'true' : 'false');
    echo " | empty: " . (empty($value) ? 'true' : 'false') . "<br>";
}

testVar('"Hello"', "Hello");
testVar('""', "");
testVar('0', 0);
testVar('null', null);
// Observe the isset and empty results for each value
?>
▶ جرّب الكود
🔥 خطأ شائع: empty(0) تُرجع true! يُعتبر الرقم 0 «فارغًا». عند التحقق من صحة إدخال رقم ما، استخدم isset() مع is_numeric() — ولا تستخدم empty().

❓ أسئلة شائعة

س لماذا لا يظهر أي شيء عند استخدام الأمر echo false؟
ج لأن echo false تعادل echo "" (سلسلة فارغة). لفحص قيمة منطقية، استخدم var_dump($var) أو echo $var ? 'true' : 'false'.
س متى يجب عليّ استخدام isset() مقابل empty()؟
ج isset() تتحقق مما إذا كان «المتغير موجودًا وغير فارغ» — استخدمها للتحقق مما إذا تم إرسال النموذج أم لا. تتحقق empty() مما إذا كان «المتغير فارغًا/صفرًا/قيمةً خاطئة» — استخدمها للتحقق مما إذا كان الحقل فارغًا. للتحقق من المدخلات الرقمية، استخدم isset() + is_numeric() — ولا تستخدم empty() أبدًا.
س لغة PHP هي لغة ذات أنواع غير صارمة. هل هذا يجعل الأخطاء المتعلقة بالأنواع شائعة؟
ج اعتمد عادتين: (1) استخدم === بدلاً من == في عمليات المقارنة (فالمقارنة الصارمة لا تقوم بالتحويل التلقائي للأنواع)؛ (2) أضف إعلانات الأنواع إلى معلمات الدوال (يدعم PHP 7+ هذه الميزة). سنناقش هذه الأمور بالتفصيل لاحقًا.

📖 ملخص

📝 تمارين

  1. أنشئ 3 متغيرات من أنواع مختلفة (سلسلة، عدد صحيح، منطقية) واستخدم var_dump() وgettype() لفحص كل منها.
  2. اكتب كودًا لاختبار سلوك isset() وempty() عند القيم التالية: "Hello"، ""، 0، null، ومتغير غير مُعرَّف. ولخص الاختلافات.
  3. اكتب تمرينًا لتحويل الأنواع: خذ سلسلة نصية لسعر أدخله المستخدم مثل "$99.9" وحوّلها إلى عدد عائم قابل للحساب. جرّب (float) — هل يعمل ذلك مباشرةً؟ إذا لم يكن الأمر كذلك، فكر في كيفية التعامل مع هذه الحالة.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%