حيدر رزاق نشر 9 سبتمبر 2023 أرسل تقرير نشر 9 سبتمبر 2023 السلام عليكم اريد شرح كتابي تفصيلي مع الامثله لأستخدام المعامل الفارغ الامن Null Safe Operator في لغة php شكرا لكم . 1 اقتباس
0 Adnane Kadri نشر 9 سبتمبر 2023 أرسل تقرير نشر 9 سبتمبر 2023 وعليكم السلام، في الأساس، المعامل الفارغ الآمن يُستخدم للتحقق من وجود القيم في الكائنات والمصفوفات بشكل آمن دون الحاجة للتحقق يدويًا ودون رمي استثناءات أو اظهار أخطاء في حالة عدم وجود القيم .. الأمر الذي يساعد على جعل الشفرة أكثر إتقانًا وقراءةً وصيانةً. تخيل السيناريو التالي: يوجد لدينا صنف User و Profile بحيث يمتلك الأول خاصية profile، في حين يمتلك الثاني خاصية باسم name class User { public $profile = null; public function __construct($profile = null){ if(!is_null($profile)){ $this->profile = $profile; } } } class Profile { public $name = null; public function __construct($name){ $this->name = $name; } } بحيث لما ننشئ مستخدما جديدا، نحن نتحكم فيما إن كان يمتلك بروفايلا أو لا. هذا البروفايل فيه بياناته الشخصية على سبيل الاسم name وغيرها. في السابق وبدون المعامل الفارغ، كنا نقوم بالمقاربة التالية لاستخراج الخاصية name من خلال user: $profile = new Profile('ahmed'); $user = new User($profile); $name = null; // تصريح قيمة افتراضية لمتغير باسم name if ($user !== null && $user->profile !== null && $user->profile->name !== null) { $name = $user->profile->name; // تخزين الاسم في متغير } echo $name; // إما قيمة الاسم إذا كان موجودًا أو null إذا لم يكن موجودًا. أما الآن فسيكفينا كتابة السياق التالي: $name = $user?->profile?->name; echo $name; بدون المعامل الفارغ سوف تحتاج القيام بالكثير من التحققات، لأنك لو حاولت قراءة name مباشرة من خلال: $name = $user->profile->name; سوف يظهر لك خطأ على نحو: Warning: Attempt to read property "name" on null in /home/user/scripts/code.php on line 23 1 اقتباس
0 عبدالباسط ابراهيم نشر 9 سبتمبر 2023 أرسل تقرير نشر 9 سبتمبر 2023 بداية من الإصدار PHP 8.0 ، تم إضافة المعامل الفارغ الآمن Null Safe Operator لتسهيل التعامل مع القيم الفارغة (null) دون حدوث أخطاء. المعامل الفارغ الآمن `?->` يستخدم للوصول إلى خاصية أو طريقة من خلال سلسلة من الكائنات، وإذا كان أي من الكائنات في السلسلة هو قيمة فارغة (null)، فإن المعامل الفارغ الآمن يعود بقيمة فارغة أيضًا بدلاً من حدوث خطأ. لنفترض أن لدينا الكود التالي كمثال: // تعريف الكائنات class User { public function getName() { return "John Doe"; } } class Address { public function getCity() { return "New York"; } } // إنشاء كائنات $user = new User(); $address = new Address(); إذا أردنا الحصول على اسم المستخدم ومدينته، ولكن قد يكون أحد الكائنات غير موجود (قيمة null)، فيمكننا استخدام المعامل الفارغ الآمن كما يلي: // الحصول على اسم المستخدم $name = $user?->getName(); // "John Doe" // الحصول على مدينة العنوان $city = $address?->getCity(); // "New York" // الحصول على اسم المدينة إذا كانت متاحة أو قيمة فارغة إذا كانت المدينة غير متاحة $cityName = $address?->getCity()?->getName(); // null في المثال الأول، يتم الوصول إلى طريقة `getName()` من خلال الكائن `$user`، ونحصل على قيمة الاسم بشكل صحيح. في المثال الثاني، يتم الوصول إلى طريقة `getCity()` من خلال الكائن `$address`، ونحصل على قيمة المدينة بشكل صحيح. في المثال الثالث، نقوم بالوصول إلى طريقة `getCity()` من خلال الكائن `$address`، ومن ثم نحاول الوصول إلى طريقة `getName()` من خلال القيمة المُعادة من `getCity()`، ولكنها تعود بقيمة فارغة (null)، لذلك يتم إرجاع قيمة فارغة (null) للمتغير `$cityName`. باستخدام المعامل الفارغ الآمن، يمكنك تبسيط التعامل مع القيم الفارغة وتجنب حدوث أخطاء غير مرغوب فيها عند الوصول إلى خصائص أو طرق في سلسلة من الكائنات. 1 اقتباس
0 سمير عبود نشر 9 سبتمبر 2023 أرسل تقرير نشر 9 سبتمبر 2023 إذا كنت قد استخدمت معامل الدمج الفارغ (null coalescing operator) في الماضي، فربما لاحظت أيضًا عيوبه: لا يعمل الدمج الفارغ في استدعاءات التوابع. بدلاً من ذلك، تحتاج إلى اختبارات تحقق وسيطة، أو تعتمد على المعامل optional المتاح في بعض الأطر: $startDate = $subscription->getStartDate(); $dateAsString = $startDate ? $startDate->asDateTimeString() : null; يوفر المعامل (null safe) وظائف مشابهة للمعامل (null coalescing)، ولكنه يدعم أيضًا استدعاءات التوابع. بدلاً من كتابة هذا: <?php $country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } } الإصدار الثامن من PHP يسمح لك بكتابة: $country = $session?->user?->getAddress()?->country; فهو يتحقق إن كان أي من الكائنات في السلسلة قيمته null فإنه يُعيد null دون حدوث خطأ، أما إن كان هناك كائن فإنه يستدعي الخاصية أو التابع. يُمكن إستخدامه في العديد من الحالات التي تتطلب التحقق و عبارات if كثيرة و الحالات التي نكون فيها نجهل القيمة المعادة من الكائن أو التابع إن كانت null أم قيمة حقيقية. اقتباس
السؤال
حيدر رزاق
السلام عليكم
اريد شرح كتابي تفصيلي مع الامثله لأستخدام المعامل الفارغ الامن Null Safe Operator في لغة php
شكرا لكم .
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.