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

Comparing Objects with == vs === الفرق بين مقارنة القيم == ومطابقة الهوية === للكائنات

خصّص سلوك الكائنات في PHP 8 عبر الدوال السحرية __toString و__invoke و__clone، وافهم النسخ السطحي والعميق ومقارنة الكائنات.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

عند مقارنة كائنين، تفحص المساواة المرنة (==) ما إذا كانا من نفس الصنف ويحملان نفس قيم الخصائص، بينما تفحص المطابقة الصارمة (===) ما إذا كان المتغيران يشيران إلى نفس الكائن بالضبط في الذاكرة.

  • فور تنفيذ $copy = clone $original، تكون نتيجة $copy == $original هي true (نفس الصنف والقيم)، بينما نتيجة $copy === $original هي false (كائنان منفصلان).
  • بعد الإسناد العادي $alias = $original، تكون نتيجة كل من $alias == $original و$alias === $original هي true.
  • أي كائنين من صنفين مختلفين لا يتساويان أبداً سواء بـ == أو بـ ===.

المتغير $b2 نسخة مستنسخة (نفس القيم بـ == ولكن هوية مستقلة بـ !==)، بينما $b3 يشير لنفس الكائن $b1 في الذاكرة.

PHP
<?php
class Badge { public function __construct(public string $code) {} }

$b1 = new Badge("GOLD");
$b2 = clone $b1;
$b3 = $b1;

echo "b1 == b2  : " . ($b1 == $b2 ? "true" : "false") . "\n";
echo "b1 === b2 : " . ($b1 === $b2 ? "true" : "false") . "\n";
echo "b1 === b3 : " . ($b1 === $b3 ? "true" : "false") . "\n";