PHP Composer va paketlar

include darsida har fayl uchun require yozgan edik. Katta loyihada bu charchatadi, tashqi kutubxonalarni esa qo’lda yuklab olish kerak bo’ladi. Composer ikkala muammoni hal qiladi.

Composer nima

O’rnatish va boshlash

# Composer o'rnatilganini tekshirish
composer --version

# Yangi loyihada
composer init

composer init savollar berib composer.json yaratadi:

{
    "name": "aziz/mening-loyiham",
    "description": "Birinchi PHP loyihasi",
    "type": "project",
    "require": {
        "php": ">=8.2"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Paket o’rnatish

composer require monolog/monolog          # jurnal yozish
composer require guzzlehttp/guzzle        # HTTP so'rovlar
composer require --dev phpunit/phpunit    # faqat ishlab chiqish uchun

Har buyruqdan keyin:

  • paket vendor/ papkasiga yuklanadi;
  • composer.json ga qo’shiladi;
  • composer.lock da aniq versiya qayd etiladi.
composer install    # lock fayl bo'yicha o'rnatadi
composer update     # yangi versiyalarga yangilaydi
composer remove monolog/monolog

Autoload — asosiy foyda

Bitta qator barcha klasslarni yuklaydi:

<?php
require __DIR__ . "/vendor/autoload.php";

// Endi hech qanday require kerak emas:
$log = new Monolog\Logger("app");
$talaba = new App\Model\Talaba("Aziz");

Klass birinchi ishlatilganda Composer uni o’zi topib yuklaydi.

PSR-4 va namespace

Autoload ishlashi uchun fayl joylashuvi klass nomiga mos bo’lishi kerak:

"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
}

Bu qoida shuni bildiradi: App\ bilan boshlangan klasslar src/ da izlanadi.

Klass Fayl
App\Model\Talaba src/Model/Talaba.php
App\Service\Hisobla src/Service/Hisobla.php
App\Ombor\TalabaOmbori src/Ombor/TalabaOmbori.php

src/Model/Talaba.php:

<?php
namespace App\Model;

class Talaba
{
    public function __construct(
        public readonly string $ism,
        public readonly int $ball,
    ) {}

    public function otdimi(): bool
    {
        return $this->ball >= 60;
    }
}

Namespace qo’shgandan keyin:

composer dump-autoload

Namespace ishlatish

PHP

Nom to’qnashsa, as bilan taxallus beriladi:

use App\Model\Talaba;
use App\Api\Talaba as ApiTalaba;

Versiya qoidalari

"require": {
    "php": ">=8.2",
    "monolog/monolog": "^3.5",
    "guzzlehttp/guzzle": "~7.8.0",
    "vlucas/phpdotenv": "5.6.0"
}
Yozuv Ma’nosi Ruxsat etadi
^3.5 Mos versiyalar 3.5 dan 4.0 gacha
~7.8.0 Faqat oxirgi raqam 7.8.0 dan 7.9.0 gacha
5.6.0 Aynan shu Faqat 5.6.0
* Har qanday ⚠️ tavsiya etilmaydi

Skriptlar

composer.json ga o’z buyruqlaringizni qo’shish mumkin:

"scripts": {
    "test": "phpunit",
    "check": "phpstan analyse src",
    "serve": "php -S localhost:8000 -t public"
}
composer test
composer serve

Foydali paketlar

Paket Vazifasi
monolog/monolog Jurnal yozish
guzzlehttp/guzzle HTTP so’rovlar (cURL o’rniga)
vlucas/phpdotenv .env fayldan sozlama o’qish
ramsey/uuid UUID identifikatorlar
nesbot/carbon Sana bilan qulay ishlash
phpunit/phpunit Testlar
phpstan/phpstan Kodni statik tekshirish

.env bilan sozlama

Maxfiy ma’lumot kodga yozilmaydi:

composer require vlucas/phpdotenv

.env fayli (git’ga qo’shilmaydi):

DB_HOST=localhost
DB_NAME=learncode
DB_PAROL=maxfiy123
<?php
require __DIR__ . "/vendor/autoload.php";

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

$host = $_ENV["DB_HOST"];
$parol = $_ENV["DB_PAROL"];

Xavfsizlik

composer audit      # ma'lum zaifliklarni tekshiradi
composer outdated   # eskirgan paketlar

Amaliy mashq

O’z kompyuteringizda bajaring:

  1. composer init bilan loyiha yarating;
  2. composer require monolog/monolog o’rnating;
  3. vendor/autoload.php ni ulab, jurnal yozing;
  4. App\ namespace’ini src/ ga bog’lang;
  5. src/Model/Talaba.php yozib, use bilan ishlating;
  6. composer.lock va vendor/ ni .gitignore bo’yicha tekshiring.

Qisqacha xulosa

  • Composer paketlarni yuklaydi, autoload beradi, versiyalarni boshqaradi.
  • composer require o’rnatadi, composer install lock bo’yicha tiklaydi.
  • vendor/ git’ga qo’shilmaydi, composer.lock — qo’shiladi.
  • require vendor/autoload.php — bitta qator, barcha klasslar.
  • PSR-4: namespace papkaga mos bo’lishi shart (katta-kichik harf ham).
  • ^3.5 — xavfsiz yangilanishlarni oladi.
  • Maxfiy sozlama .env da; u ham git’ga tushmaydi.

Keyingi darsda xavfsizlik — hujumlardan himoya qoidalari.

Bu dars foydali bo'ldimi?

marta ko'rildi