Menu
Coddy logo textTech

__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() על אובייקט. זה שימושי להסתרת נתונים רגישים או להצגת ערכים מחושבים במהלך ניפוי שגיאות:

<?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 הרגיש מוסתר, ומספר החשבון מוסווה חלקית — מושלם לניפוי שגיאות מאובטח.

challenge icon

אתגר

קל

בואו נבנה מערכת לניהול פרטי התחברות שמדגימה את שתי המתודות הקסומות __toString() ו-__debugInfo(). תיצרו מחלקה שמציגה מידע ידידותי למשתמש כשמדפיסים אותה, ובו בזמן מגינה על נתונים רגישים במהלך ניפוי שגיאות.

תארגנו את הקוד שלכם בשני קבצים:

  • Credential.php: צרו מחלקה בשם Credential ששומרת פרטי התחברות באופן מאובטח. השתמשו בקידום מאפיינים בבנאי כדי להגדיר מאפיינים פרטיים עבור $username (מחרוזת), $password (מחרוזת) ו-$lastLogin (מחרוזת). ממשו שתי מתודות קסומות:
    • __toString(): מחזירה מחרוזת ידידותית למשתמש: "User: [username] (Last login: [lastLogin])". שימו לב שהסיסמה לעולם אינה נחשפת בייצוג המחרוזתי.
    • __debugInfo(): מחזירה מערך עבור var_dump(), המציג את שם המשתמש כפי שהוא, מסתיר את הסיסמה ומציג רק את "[PROTECTED]", ומציג את תאריך ההתחברות האחרונה כרגיל.
  • main.php: כללו את קובץ פרטי ההתחברות. תקבלו שלושה ערכי קלט: שם משתמש, סיסמה ותאריך התחברות אחרונה. צרו מופע של Credential עם הערכים האלה. תחילה, הדפיסו את אובייקט פרטי ההתחברות ישירות באמצעות echo (פעולה זו מפעילה את __toString()). לאחר מכן, בשורה חדשה, השתמשו ב-var_dump() על האובייקט כדי לראות את פלט ניפוי השגיאות המוגן.

המתודה __toString() מספקת דרך נקייה ובטוחה להציג את פרטי ההתחברות בלי לחשוף את הסיסמה. המתודה __debugInfo() מבטיחה שגם במהלך ניפוי שגיאות מידע רגיש יישאר מוסתר: זהו נוהג חיוני בעבודה עם נתוני אימות.

נסו בעצמכם

<?php

require_once 'Credential.php';

// קרא את הקלטים
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));

// TODO: צור מופע של Credential עם ערכי הקלט

// TODO: הדפס את אובייקט ה-Credential באמצעות echo (מפעיל את __toString())

// TODO: השתמש ב-var_dump() על האובייקט כדי לראות את פלט ניפוי השגיאות המוגן

?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין