הטוען האוטומטי של Composer
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 13 מתוך 91.
כתיבת טוען אוטומטי משלך עובדת, אבל בפרויקטים אמיתיים של PHP משתמשים ב-Composer כדי לטפל בטעינה האוטומטית באופן אוטומטי. Composer קורא את הגדרות הפרויקט שלך ומייצר טוען אוטומטי ממוטב שעומד בתקני PSR-4.
ההגדרות נמצאות בקובץ composer.json בשורש הפרויקט שלך. כך מגדירים את כללי הטעינה האוטומטית:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}הדבר אומר ל-Composer שיש לטעון כל מחלקה שמתחילה ב-App\ מתוך תיקיית src/. לאחר הגדרת הדבר, Composer יוצר את קובצי הטעינה האוטומטית בתיקיית vendor/.
כדי להשתמש בטעינה האוטומטית של Composer, דרושה לך רק שורה אחת בראש קובץ הכניסה שלך:
<?php
require 'vendor/autoload.php';
use App\Models\User;
use App\Services\Logger;
$user = new User("Alice");
$logger = new Logger();
פקודת require היחידה הזאת מטפלת בטעינת כל המחלקות בפרויקט כולו. אפשר להגדיר מיפויים מרובים של מרחבי שמות לפי הצורך:
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
}
}נקודה מרכזית: הטוען האוטומטי של Composer מבטל את הצורך בהכללה ידנית של קבצים ומבטיח טעינה עקבית של מחלקות בכל רחבי הפרויקט שלך. זו הגישה המקובלת כמעט בכל יישומי PHP והמסגרות המודרניים.
אתגר
קלבואו נבנה יישום קטן שמשתמש בגישת הטעינה האוטומטית של Composer כדי לארגן מחלקות בכמה קבצים. נדמה את האופן שבו פרויקט PHP אמיתי מארגן את הקוד שלו באמצעות מרחבי שמות של PSR-4 וטוען אוטומטי מרכזי.
תיצרו ארבעה קבצים שפועלים יחד:
src/Models/Product.php: הגדירו מחלקה בשםProductבמרחב השמותApp\Models. צריכות להיות לה התכונותpublic $nameו-public $price, בנאי שמקבל את שני הערכים ומגדיר אותם, ומתודה בשםgetInfo()שמחזירה"[name]: $[price]".src/Models/Customer.php: הגדירו מחלקה בשםCustomerבמרחב השמותApp\Models. צריכה להיות לה התכונהpublic $name, בנאי שמקבל את השם ומגדיר אותו, ומתודה בשםgreet()שמחזירה"Welcome, [name]!".vendor/autoload.php: צרו טוען אוטומטי פשוט באמצעותspl_autoload_registerשמחקה את ההתנהגות של Composer. עליו למפות את קידומת מרחב השמותApp\לתיקייהsrc/, להמיר מפרידי מרחבי שמות למפרידי תיקיות ולהוסיף.phpכדי לטעון את הקובץ המתאים.index.php: זהו קובץ נקודת הכניסה שלכם. טענו את הטוען האוטומטי מתוךvendor/autoload.phpבשורה אחת, ואז השתמשו במילת המפתחuseכדי לייבא גם אתApp\Models\Productוגם אתApp\Models\Customer. צרו אובייקטProductעם השם"Laptop"והמחיר999, ואובייקטCustomerעם השם"Alice". הדפיסו את התוצאה של קריאה ל-greet()עבור הלקוח ול-getInfo()עבור המוצר (כל אחד בשורה נפרדת).
הרעיון המרכזי כאן הוא שהקובץ index.php צריך רק פקודת require אחת כדי לטעון את הטוען האוטומטי; לאחר מכן, כל המחלקות נטענות אוטומטית כשמשתמשים בהן. כך בדיוק פועלות מסגרות עבודה ויישומים מודרניים של PHP עם Composer.
נסו בעצמכם
<?php
// TODO: טענו את הטוען האוטומטי מתוך vendor/autoload.php
// TODO: השתמשו במילת המפתח 'use' כדי לייבא את App\Models\Product
// TODO: השתמשו במילת המפתח 'use' כדי לייבא את App\Models\Customer
// TODO: צרו Product עם השם "Laptop" והמחיר 999
// TODO: צרו Customer עם השם "Alice"
// TODO: הדפיסו את התוצאה של greet() של הלקוח
// TODO: הדפיסו את התוצאה של getInfo() של המוצר
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין