انتقل إلى محتوى الدرس
الدرس 07
دورة PHP

فحص المتغيرات بـ isset و empty و unset والإسناد بالمرجع في PHPPHP Variable Testing isset empty unset and Reference Assignment

افحص حالة المتغيرات بدقة في PHP 8 باستخدام isset وempty وis_null وunset، وافهم الفرق العميق بين النسخ بالقيمة والإسناد بالمرجع.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تفحص البنية اللغوية isset() ما إذا كان المتغير معرّفاً في الذاكرة وقيمته لا تساوي null دون إطلاق تحذير المتغير غير المعرّف.

  • تُرجع isset($var) القيمة true حتى لو كانت قيمة المتغير false أو 0 أو نصاً فارغاً "".
  • تمرير عدة متغيرات مثل isset($a, $b) يُرجع true فقط إذا كانت جميعها موجودة وغير مساوية لـ null.
  • استدعاء الدالة is_null($var) على متغير غير معرّف يطلق تحذيراً في PHP، بينما isset($var) آمنة تماماً.

لاحظ أن $discount = 0 يُعتبر معرّفاً وموجوداً (bool(true))، بينما $deletedAt = null والمتغير غير الموجود $missingVar يُرجعان bool(false).

مخطط توضيحي: محاكي فحص حالة المتغيرات والإسناد بالمرجع في PHP
PHP
<?php
$username = "amer";
$discount = 0;
$deletedAt = null;

var_dump(isset($username));
var_dump(isset($discount));
var_dump(isset($deletedAt));
var_dump(isset($username, $discount));
var_dump(isset($missingVar));

تفحص البنية empty() ما إذا كان المتغير غير موجود أصلاً أو يحمل قيمة تُقيَّم منطقياً كقيمة فارغة أو صفرية.

  • القيم التي تُعتبر فارغة في PHP هي: "" و0 و0.0 و"0" وnull وfalse.
  • تماماً مثل isset()، استدعاء empty($undeclared) على متغير غير موجود لا يطلق أي تحذير برمجي.
  • انتبه جيداً للنص "0"؛ فإن empty("0") تُرجع true، مما قد يربك فحص المدخلات الرقمية الصفرية.

كل من "" و"0" يُرجع bool(true) مع empty()، بينما نص يحتوي مسافة واحدة " " يُعتبر غير فارغ (bool(false)).

PHP
<?php
$emptyText = "";
$zeroString = "0";
$spaceText = " ";
$activeCount = 5;

var_dump(empty($emptyText));
var_dump(empty($zeroString));
var_dump(empty($spaceText));
var_dump(empty($activeCount));
var_dump(empty($neverDeclared));

تقوم البنية unset() بحذف اسم المتغير من جدول الرموز الحالي بحيث يعود غير معرّف وتُرجع isset() عليه false.

  • يمكنك إلغاء متغير واحد أو عدة متغيرات في تعليمة واحدة: unset($tempToken, $rawBuffer);.
  • لا تُرجع unset() أي قيمة؛ ومحاولة إسناد ناتجها لمتغير آخر تسبب خطأً نحوياً.
  • بعد تنفيذ unset()، قراءة المتغير مباشرة تطلق تحذيراً إلا إذا استُخدم مع isset() أو معامل ??.

بعد أن تحذف unset($apiToken, $cacheKey) المتغيرين، تصبح نتيجة isset($apiToken) هي false، ويعود معامل ?? للقيمة البديلة بأمان.

PHP
<?php
$apiToken = "tok_live_98a7bc";
$cacheKey = "user_profile_42";

var_dump(isset($apiToken));
unset($apiToken, $cacheKey);
var_dump(isset($apiToken));

$safeToken = $apiToken ?? "expired_token";
echo $safeToken . "\n";

افتراضياً في PHP، يتم إسناد المتغيرات بالقيمة (نسخة مستقلة)، بينما إضافة الرمز & قبل المتغير المصدر تنشئ مرجعاً يشترك في نفس القيمة بالذاكرة.

  • في الإسناد بالقيمة ($b = $a)، تعديل $b لاحقاً لا يؤثر إطلاقاً على قيمة $a الأصلية.
  • في الإسناد بالمرجع ($ref = &$a)، يشير كلا الاسمين إلى نفس حاوية القيمة الداخلية (zval) في محرك Zend.
  • أي تعديل يُجرى عبر $a أو عبر $ref يظهر فوراً عند قراءة الطرف الآخر.

تغيير $copiedPrice إلى 150 يُبقي $price عند 100، بينما تغيير $aliasBalance إلى 750 يحدّث $sharedBalance إلى 750 أيضاً.

مخطط تدفق التنفيذ العملي لقسم النسخ المستقل بالقيمة مقابل الربط بالمرجع & في لغة PHP
PHP
<?php
$price = 100;
$copiedPrice = $price;
$copiedPrice = 150;

$sharedBalance = 500;
$aliasBalance = &$sharedBalance;
$aliasBalance = 750;

echo "Price: $price, Copy: $copiedPrice\n";
echo "Shared: $sharedBalance, Alias: $aliasBalance\n";

استدعاء unset() على متغير مربوط بالمرجع يفك الارتباط بين هذا الاسم والقيمة فقط، ولا يمسح المتغيرات الأخرى التي ما زالت تشير لنفس القيمة.

  • تنفيذ unset($alias) يفصل الاسم $alias فقط بينما يحتفظ المتغير الأصلي $original بقيمته كاملة.
  • على العكس، كتابة $alias = null تستبدل القيمة المشتركة فتتحول قيمة كل من $alias و$original إلى null!
  • استخدم دائماً unset($ref) لفك ارتباط أي متغير مرجعي فور الانتهاء من استخدامه.

حذف المرجع $editorAlias عبر unset() يزيل الاسم المستعار فقط، ويحتفظ $primaryTitle بالنص "CloseTag PHP Track" كاملاً.

PHP
<?php
$primaryTitle = "CloseTag PHP Track";
$editorAlias = &$primaryTitle;

unset($editorAlias);
echo "After unset: $primaryTitle\n";
var_dump(isset($editorAlias));

تساعد المقارنة المباشرة بين isset() وempty() و=== null على منع الأخطاء الخفية عند فحص الأرقام والقيم المنطقية والمدخلات الاختيارية.

  • استخدم isset($v) عندما تكون القيم 0 أو "0" أو false قيماً صالحة ومقبولة لا يجب رفضها.
  • استخدم $v === null عندما يكون المتغير معرّفاً مسبقاً بالتأكيد وتريد فحص كونه null بصرامة.
  • قارن نتائج الدوال الثلاث مع القيم الحدية في الجدول المرجعي أدناه.

مع القيمة 0، تُرجع كل من isset() وempty() القيمة true لأن المتغير موجود ومعرّف لكن قيمته الرقمية صفرية.

قيمة المتغير ($v)نتيجة isset($v)نتيجة empty($v)نتيجة is_null($v)
"" (empty string)truetruefalse
0 or "0"truetruefalse
falsetruetruefalse
nullfalsetruetrue
Undeclared $vfalsetrueWarning + true
PHP
<?php
$zeroInt = 0;
$nullVal = null;

echo "0 -> isset: ";
var_dump(isset($zeroInt));
echo "0 -> empty: ";
var_dump(empty($zeroInt));
echo "null -> is_null: ";
var_dump(is_null($nullVal));
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تساعد المقارنة المباشرة بين isset() وempty() و=== null على منع الأخطاء الخفية عند فحص الأرقام والقيم المنطقية والمدخلات الاختيارية. استخدم isset($v) عندما تكون القيم 0 أو "0" أو false قيماً صالحة ومقبولة لا يجب رفضها. استخدم $v === null عندما يكون المتغير معرّفاً مسبقاً بالتأكيد وتريد فحص كونه null بصرامة. قارن نتائج الدوال الثلاث مع القيم الحدية في الجدول المرجعي أدناه.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 isset, empty & unset فحص المتغيرات isset و empty
افحص حالة المتغيرات بدقة في PHP 8 باستخدام isset وempty وis_null وunset، وافهم الفرق العميق بين النسخ بالقيمة والإسناد بالمرجع.
للمراجعة
02 Checking Existence with isset فحص وجود المتغير وعدم كونه null عبر isset
المفهوم الأساسي لقسم فحص وجود المتغير وعدم كونه null عبر isset في لغة PHP الحديثة.
للمراجعة
03 Evaluating Falsy States with empty فحص القيم الفارغة والصفرية عبر empty
الصياغة البرمجية والتطبيق العملي المباشر لقسم فحص القيم الفارغة والصفرية عبر empty.
للمراجعة
04 Destroying Variables with unset إلغاء تعريف المتغيرات وتحريرها عبر unset
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم إلغاء تعريف المتغيرات وتحريرها عبر unset.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 PHP PHP
PHP: Hypertext Preprocessor
لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
للمراجعة
02 CLI CLI
Command-Line Interface
واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
للمراجعة
03 FPM FPM
FastCGI Process Manager
مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم فحص وجود المتغير وعدم كونه null عبر isset للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم فحص القيم الفارغة والصفرية عبر empty وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ماذا تُرجع التعليمة isset($count) عندما تكون قيمة $count = 0؟

لا تُرجع isset() القيمة false إلا إذا كان المتغير غير معرّف أو يساوي null.

02

أي قيمة مما يلي تجعل empty($val) تُرجع true؟

تعتبر لغة PHP النص المكون من الصفر "0" قيمة فارغة في empty().

03

ماذا يحدث عند استدعاء is_null($undeclaredVar) على متغير لم يتم تعريفه مسبقاً؟

بخلاف isset() وempty()، فإن is_null() دالة عادية تطلق تحذيراً إذا لم يكن المتغير موجوداً.

04

بعد تنفيذ $a = 10; $b = &$a; $b = 25; ما هي قيمة المتغير $a؟

لأن $b مرجع مرتبط بـ $a عبر &، فإن تعديل $b يحدّث القيمة المشتركة بينهما.

05

إذا كان الارتباط $alias = &$original; نشطاً، فما تأثير unset($alias) على المتغير الأصلي $original؟

تحذف unset() اسم المتغير الممرر لها فقط ولا تمس المتغيرات الأخرى المشتركة في القيمة.

06

ما الفرق بين $alias = null و unset($alias) عندما يكون $alias = &$original؟

إسناد null يعدّل القيمة المشتركة في الذاكرة، بينما unset() تفصل الرابط فقط.

07

ماذا تُرجع isset($a, $b, $c) إذا كانت $a = 1 و$b = "ok" و$c = null؟

تُرجع isset() متعددة المعاملات false فور مصادفة أي متغير غير معرّف أو يساوي null.

08

كيف يحسّن محرك PHP أداء النسخ بالقيمة ($copy = $largeString) قبل تعديل أي من المتغيرين؟

لا ينسخ محرك Zend البيانات فعلياً في الذاكرة إلا في اللحظة التي يتغير فيها أحد المتغيرين.