في هذا الدرس 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
$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
$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
$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
$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
$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) | true | true | false |
0 or "0" | true | true | false |
false | true | true | false |
null | false | true | true |
Undeclared $v | false | true | Warning + true |
<?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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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 ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم فحص وجود المتغير وعدم كونه null عبر isset للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم فحص القيم الفارغة والصفرية عبر empty وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا تُرجع التعليمة isset($count) عندما تكون قيمة $count = 0؟
لا تُرجع isset() القيمة false إلا إذا كان المتغير غير معرّف أو يساوي null.
أي قيمة مما يلي تجعل empty($val) تُرجع true؟
تعتبر لغة PHP النص المكون من الصفر "0" قيمة فارغة في empty().
ماذا يحدث عند استدعاء is_null($undeclaredVar) على متغير لم يتم تعريفه مسبقاً؟
بخلاف isset() وempty()، فإن is_null() دالة عادية تطلق تحذيراً إذا لم يكن المتغير موجوداً.
بعد تنفيذ $a = 10; $b = &$a; $b = 25; ما هي قيمة المتغير $a؟
لأن $b مرجع مرتبط بـ $a عبر &، فإن تعديل $b يحدّث القيمة المشتركة بينهما.
إذا كان الارتباط $alias = &$original; نشطاً، فما تأثير unset($alias) على المتغير الأصلي $original؟
تحذف unset() اسم المتغير الممرر لها فقط ولا تمس المتغيرات الأخرى المشتركة في القيمة.
ما الفرق بين $alias = null و unset($alias) عندما يكون $alias = &$original؟
إسناد null يعدّل القيمة المشتركة في الذاكرة، بينما unset() تفصل الرابط فقط.
ماذا تُرجع isset($a, $b, $c) إذا كانت $a = 1 و$b = "ok" و$c = null؟
تُرجع isset() متعددة المعاملات false فور مصادفة أي متغير غير معرّف أو يساوي null.
كيف يحسّن محرك PHP أداء النسخ بالقيمة ($copy = $largeString) قبل تعديل أي من المتغيرين؟
لا ينسخ محرك Zend البيانات فعلياً في الذاكرة إلا في اللحظة التي يتغير فيها أحد المتغيرين.