Menu
Coddy logo textTech

הטוען האוטומטי של 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 והמסגרות המודרניים.

challenge icon

אתגר

קל

בואו נבנה יישום קטן שמשתמש בגישת הטעינה האוטומטית של 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() של המוצר
?>
quiz iconבחנו את עצמכם

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

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

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