מחלקות אנונימיות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 58 מתוך 91.
לפעמים צריך אובייקט פשוט וחד־פעמי בלי התקורה הכרוכה בהגדרת מחלקה שלמה. מחלקות אנונימיות מאפשרות ליצור אובייקטים תוך כדי תנועה, בדיוק במקום שבו צריך אותם. הן שימושיות במיוחד בשילוב עם הזרקת תלויות.
מחלקה אנונימית מוגדרת באמצעות new class ולאחריה גוף המחלקה:
<?php
$logger = new class {
public function log(string $message): void {
echo "Log: $message";
}
};
$logger->log("Hello!");
פלט:
Log: Hello!מחלקות אנונימיות נעשות עוצמתיות כשמממשים ממשקים. זה אידיאלי לבדיקות או כשצריך מימוש מהיר בלי להעמיס על בסיס הקוד במחלקות לשימוש חד-פעמי:
<?php
interface Notifier {
public function send(string $message): string;
}
function notify(Notifier $notifier, string $msg): string {
return $notifier->send($msg);
}
$result = notify(new class implements Notifier {
public function send(string $message): string {
return "Sent: $message";
}
}, "Test message");
echo $result;
פלט:
Sent: Test messageמחלקות אנונימיות יכולות גם לרשת מחלקות אחרות, להשתמש ב־traits ולקבל ארגומנטים של בנאי. יש להן גישה מלאה ליכולות של תכנות מונחה עצמים — הן פשוט מוגדרות בשורה, במקום בקובץ נפרד. השתמשו בהן כשמימוש מלא של מחלקה יהיה מוגזם, אבל עדיין דרוש לכם אופן פעולה מונחה עצמים.
אתגר
קלבואו נבנה מערכת לעיצוב נתונים שמדגימה את העוצמה של מחלקות אנונימיות. במקום ליצור קובצי מחלקה נפרדים למימושים פשוטים וחד־פעמיים, תשתמשו במחלקות אנונימיות כדי ליצור מימושים מהירים בדיוק במקום שבו אתם זקוקים להם.
תארגנו את הקוד שלכם בשני קבצים:
FormatterInterface.php: הגדירו ממשק בשםFormatterInterfaceעם מתודה אחת,format(string $data): string. כך תגדירו את החוזה שעל כל מעצב נתונים לקיים.main.php: כללו את קובץ הממשק וצרו מחלקתDataProcessorשמשתמשת בהזרקת תלות כדי לקבל כל מעצב נתונים. המחלקה צריכה:- לקבל
FormatterInterfaceבבנאי שלה - להכיל מתודה
process(string $data)שמעבירה את הנתונים למעצב הנתונים שהוזרק ומחזירה את התוצאה שלו
תקבלו שתי קלטים: סוג עיצוב (
"upper"או"reverse") ומחרוזת לעיצוב.בהתאם לסוג העיצוב, צרו מחלקה אנונימית שמממשת את
FormatterInterface:- עבור
"upper": המתודהformat()צריכה להחזיר את הנתונים כשהם מומרות לאותיות רישיות - עבור
"reverse": המתודהformat()צריכה להחזיר את הנתונים בסדר הפוך
הזריקו את המחלקה האנונימית שלכם ל־
DataProcessor, קראו ל־process()עם מחרוזת הקלט והדפיסו את התוצאה.- לקבל
הגישה הזו מושלמת כשאתם זקוקים למימוש מהיר בלי להעמיס על בסיס הקוד שלכם קובצי מחלקה לשימוש חד־פעמי. המחלקה האנונימית נוצרת בתוך שורת הקוד, מממשת את הממשק הנדרש וניתן להעביר אותה לכל מקום שבו מצפים לממשק הזה.
נסו בעצמכם
<?php
require_once 'FormatterInterface.php';
// TODO: צור מחלקת DataProcessor ש:
// - מקבלת FormatterInterface בבנאי שלה
// - כוללת מתודה process(string $data) שמעבירה את הטיפול למעצב
// קרא קלט
$formatType = trim(fgets(STDIN));
$inputString = trim(fgets(STDIN));
// TODO: על סמך $formatType ("upper" או "reverse"), צור מחלקה אנונימית
// שמממשת את FormatterInterface
// - עבור "upper": על format() להחזיר את הנתונים באותיות רישיות
// - עבור "reverse": על format() להחזיר את הנתונים בסדר הפוך
// TODO: צור DataProcessor עם מעצב המחלקה האנונימית שלך
// קרא ל-process() עם מחרוזת הקלט והדפס את התוצאה
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים10מושגי OOP מתקדמים
הרכבה לעומת ירושההזרקת תלויותמחלקות אנונימיותטיפוסי Enum (PHP 8.1)סיבים (PHP 8.1)העמקה בשכפול אובייקטיםמחוללים ואיטרטורים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין