المتغيرات وأنواع البيانات
المتغيرات تشبه الصناديق المُعلمة — تضع البيانات داخل الصندوق، وتُعلق عليه علامة، ثم تستخدم هذه العلامة لاحقًا للعثور عليها. في لغة 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+ هذه الميزة). سنناقش هذه الأمور بالتفصيل لاحقًا.📖 ملخص
- تبدأ المتغيرات بـ
$، وتستخدم أسلوب التسمية «camelCase»، وتراعي التمييز بين الأحرف الكبيرة والصغيرة - تحتوي لغة PHP على 8 أنواع: 4 أنواع قياسية + 4 أنواع مركبة/خاصة
var_dump()يعرض قيمة المتغير ونوعه — أداة التصحيح المفضلة لديك- تقوم علامات الاقتباس المزدوجة بتحليل المتغيرات؛ أما علامات الاقتباس المفردة فلا تفعل ذلك
(int)،(string)، وما إلى ذلك، تقوم بتحويل صريح للأنواعisset()يتحقق من وجود القيمة ومن أنها غير فارغة؛empty()يتحقق من كونها فارغة (يُعتبر الرقم 0 فارغًا أيضًا)
📝 تمارين
- أنشئ 3 متغيرات من أنواع مختلفة (سلسلة، عدد صحيح، منطقية) واستخدم
var_dump()وgettype()لفحص كل منها. - اكتب كودًا لاختبار سلوك
isset()وempty()عند القيم التالية:"Hello"،""،0،null، ومتغير غير مُعرَّف. ولخص الاختلافات. - اكتب تمرينًا لتحويل الأنواع: خذ سلسلة نصية لسعر أدخله المستخدم مثل
"$99.9"وحوّلها إلى عدد عائم قابل للحساب. جرّب(float)— هل يعمل ذلك مباشرةً؟ إذا لم يكن الأمر كذلك، فكر في كيفية التعامل مع هذه الحالة.



