סיכום – אוסף מותאם אישית
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 50 מתוך 91.
אתגר
קלבואו נבנה מחלקת Collection שמאגדת את כל המתודות הקסומות שלמדת בפרק הזה. האוסף שלך יתפקד כמכל נתונים גמיש ונוח לשימוש: אחסון פריטים לפי מפתח, בדיקה אם הם קיימים, חיפוש פריטים באופן דינמי ויצירת עותקים עצמאיים.
תארגן את הקוד שלך בשני קבצים:
Collection.php: צור מחלקתCollectionששומרת פריטים במערך פרטי. האוסף שלך צריך לתמוך במתודות הקסומות הבאות הפועלות יחד:__construct(): מקבלת מערך אופציונלי של פריטים ראשוניים (ברירת המחדל היא מערך ריק)__get($key): מחזירה את הפריט במפתח הנתון, אוnullאם הוא לא קיים__set($key, $value): שומרת את הערך במפתח הנתון__isset($key): מחזירה האם המפתח קיים באוסף__unset($key): מסירה את הפריט במפתח הנתון__call($method, $args): מטפלת במתודות חיפוש דינמיות. כאשר קוראים למתודה שמתחילה ב-findBy(כמוfindByRoleאוfindByStatus), חלץ את שם השדה (הפוך לאותיות קטנות את החלק שאחרי "findBy"), חפש בכל הפריטים והחזר את המפתח של הפריט הראשון שבו השדה תואם לארגומנט הראשון. החזרnullאם לא נמצאה התאמה. עבור כל מתודה אחרת, החזר"Unknown method: [method]"__toString(): מחזירה"Collection([count] items)"כאשר count הוא מספר הפריטים__clone(): בעת שכפול, מערך הפריטים צריך להיות עותק חדש (ולא הפניה למקור)
main.php: כלול את קובץ Collection. תקבל שלושה קלטים: שם מפתח, ערך תפקיד ותפקיד לחיפוש. בנה אוסף משתמשים והדגם את כל המתודות הקסומות:- צור
Collectionחדשה - הוסף משתמש עם מפתח הקלט, ושמור מערך שבו
"name"מוגדר למפתח ו-"role"מוגדר לערך התפקיד מהקלט - הוסף משתמש נוסף עם המפתח
"bob", ושמור את["name" => "Bob", "role" => "editor"] - הדפס האם מפתח הקלט קיים באמצעות
isset(): הפלט יהיה"exists"או"missing" - הדפס את התוצאה של קריאה למתודה הדינמית
findByRole()עם תפקיד החיפוש כארגומנט (היא אמורה להחזיר את המפתח של המשתמש המתאים, או לא להחזיר דבר אם התוצאה היא null) - הדפס את האוסף באמצעות
echo(מפעיל את__toString) - שכפל את האוסף, ואז בטל את ההגדרה של מפתח הקלט בעותק המשוכפל
- הדפס האם מפתח הקלט קיים באוסף המקורי: הפלט יהיה
"exists"או"missing"(הוא אמור עדיין להתקיים, כי העותק המשוכפל עצמאי)
- צור
כל פלט צריך להופיע בשורה נפרדת. מנגנון החיפוש הדינמי מניח שכל פריט באוסף שלך הוא מערך אסוציאטיבי עם שדות כמו "name" ו-"role".
נסו בעצמכם
<?php
require_once 'Collection.php';
// קראו את הקלטים
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));
// TODO: צרו Collection חדש
// TODO: הוסיפו משתמש עם מפתח הקלט, ושמרו מערך שבו "name" => המפתח ו-"role" => roleValue
// TODO: הוסיפו משתמש נוסף עם המפתח "bob", ושמרו ["name" => "Bob", "role" => "editor"]
// TODO: הדפיסו אם מפתח הקלט קיים באמצעות isset() - הפלט יהיה "exists" או "missing"
// TODO: הדפיסו את התוצאה של קריאה ל-findByRole() עם searchRole כארגומנט
// TODO: הדפיסו את האוסף באמצעות echo (מפעיל את __toString)
// TODO: שכפלו את האוסף, ואז הסירו את מפתח הקלט מהעותק
// TODO: הדפיסו אם מפתח הקלט קיים באוסף המקורי - "exists" או "missing"
?>כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין