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.jsonga qo’shiladi;composer.lockda 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
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:
composer initbilan loyiha yarating;composer require monolog/monologo’rnating;vendor/autoload.phpni ulab, jurnal yozing;App\namespace’inisrc/ga bog’lang;src/Model/Talaba.phpyozib,usebilan ishlating;composer.lockvavendor/ni.gitignorebo’yicha tekshiring.
Qisqacha xulosa
- Composer paketlarni yuklaydi, autoload beradi, versiyalarni boshqaradi.
composer requireo’rnatadi,composer installlock 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
.envda; u ham git’ga tushmaydi.
Keyingi darsda xavfsizlik — hujumlardan himoya qoidalari.