Avatar ·

عامل إلفيس (?:) وعامل الدمج مع null (??) في PHP: ما الفرق؟

مرحبًا بالجميع. أنا مطور PHP مبتدئ، ولا أستطيع فهم الفرق بين عاملين: العامل الثلاثي القصير (يُسمى أيضًا "إلفيس") `?:` وعامل الدمج مع null `??`. في التوثيق مكتوب أنهما متشابهان، لكني دائمًا ما أخلط بينهما وأي منهما يجب استخدامه. لدي هذا الكود. أحصل على بيانات من نموذج أو من قاعدة بيانات، وأريد عرض اسم المستخدم إذا كان موجودًا، أو "ضيف" إذا لم يكن: ```php $username = $_POST['username'] ?: 'ضيف'; ``` هذا يعمل، لكن أحيانًا أرى مطورين آخرين يكتبون هكذا: ```php $username = $_POST['username'] ?? 'ضيف'; ``` كلا الخيارين يبدو أنهما يفعلان نفس الشيء. لكن لاحظت أنه إذا جاء في `$_POST['username']` سلسلة فارغة `""`، فإن الخيار الأول (مع `?:`) يطبع "ضيف"، بينما الثاني (مع `??`) يطبع سلسلة فارغة. لماذا يحدث هذا؟ وأي خيار هو الأصح استخدامًا عندما أريد التحقق من أن المتغير موجود أساسًا ولا يساوي `null`؟ مثال آخر. لدي مصفوفة تحتوي على