__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 הרגיש מוסתר, ומספר החשבון מוסווה חלקית — מושלם לניפוי שגיאות מאובטח.
אתגר
קלבואו נבנה מערכת לניהול פרטי התחברות שמדגימה את שתי המתודות הקסומות __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() על האובייקט כדי לראות את פלט ניפוי השגיאות המוגן
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין