Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

__toString و __debugInfo

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 45 من 91.

تتيح لك طريقة __toString() تحديد كيفية تمثيل كائن كسلسلة نصية. يتم استدعاء هذه الطريقة تلقائيًا عند استخدام كائن في سياق سلسلة نصية، كما هو الحال مع echo أو تسلسل السلاسل النصية.

<?php
class User {
    public function __construct(
        private string $name,
        private string $email
    ) {}
    
    public function __toString(): string {
        return $this->name . " (" . $this->email . ")";
    }
}

$user = new User("Alice", "alice@example.com");
echo $user;

الإخراج:

Alice (alice@example.com)

تتحكم الدالة __debugInfo() في المعلومات التي تظهر عند استخدام var_dump() على object. وهذا مفيد لإخفاء البيانات الحساسة أو إظهار القيم المحسوبة أثناء تصحيح الأخطاء:

<?php
class BankAccount {
    public function __construct(
        private string $accountNumber,
        private float $balance,
        private string $pin
    ) {}
    
    public function __debugInfo(): array {
        return [
            'accountNumber' => '****' . substr($this->accountNumber, -4),
            'balance' => $this->balance,
            'pin' => '[HIDDEN]'
        ];
    }
}

$account = new BankAccount("1234567890", 1500.00, "9876");
var_dump($account);

الناتج:

object(BankAccount)#1 (3) {
  ["accountNumber"]=>
  string(8) "****7890"
  ["balance"]=>
  float(1500)
  ["pin"]=>
  string(8) "[HIDDEN]"
}

لاحظ كيف تُرجع __debugInfo() مصفوفة من أزواج المفتاح والقيمة التي تستبدل تفريغ الخصائص الافتراضي. يتم إخفاء رمز PIN الحساس، ويتم إخفاء جزء من رقم account - وهذا مثالي لتصحيح الأخطاء بشكل آمن.

challenge icon

التحدي

سهل

لنبنِ نظامًا لإدارة بيانات الاعتماد يوضّح كلًا من طريقتَي السحر __toString() و__debugInfo(). ستنشئ فئة تعرض معلومات سهلة الفهم للمستخدم عند طباعتها، مع حماية البيانات الحساسة أثناء تصحيح الأخطاء.

ستنظّم الشيفرة عبر ملفين:

  • Credential.php: أنشئ فئة Credential تخزّن معلومات login بأمان. استخدم ترقية المُنشئ لتعريف الخصائص الخاصة لـ $username (من النوع string)، و$password (من النوع string)، و$lastLogin (من النوع string). نفّذ طريقتين سحريتين:
    • __toString(): تُعيد سلسلة نصية سهلة الفهم: "User: [username] (Last login: [lastLogin])". لاحظ أن password لا يتم كشفه مطلقًا في التمثيل النصي.
    • __debugInfo(): تُعيد array لـ var_dump() تعرض username كما هو، وتحجب password عبر إظهار "[PROTECTED]" فقط، وتعرض تاريخ last login بشكل عادي.
  • main.php: ضمّن ملف Credential. ستتلقى ثلاث قيم إدخال: اسم username، وpassword، وتاريخ last login. أنشئ كائنًا من Credential باستخدام هذه القيم. أولًا، اطبع كائن credential مباشرةً باستخدام echo (يؤدي ذلك إلى تشغيل __toString()). ثم في سطر جديد، استخدم var_dump() على الكائن لرؤية ناتج التصحيح المحمي.

توفّر طريقة __toString() أسلوبًا نظيفًا وآمنًا لعرض credential دون كشف password. وتضمن طريقة __debugInfo() بقاء المعلومات الحساسة مخفية حتى أثناء تصحيح الأخطاء: وهي ممارسة بالغة الأهمية عند العمل مع بيانات المصادقة.

جرّب بنفسك

<?php

require_once 'Credential.php';

// اقرأ المدخلات
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));

// TODO: أنشئ مثيلاً من Credential بقيم الإدخال

// TODO: اطبع كائن credential (يشغّل __toString())

// TODO: استخدم var_dump() على الكائن لرؤية مخرجات التصحيح المحمية

?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت