PHP include va kodni fayllarga bo'lish

Saytda o’nlab sahifa bo’ladi va har birida bir xil sarlavha, menyu va pastki qism takrorlanadi. Menyuga bitta havola qo’shish uchun o’nta faylni tahrirlash — mantiqsiz. include shu muammoni hal qiladi.

Muammo

sayt/
├── index.php      ← sarlavha + menyu + mazmun + footer
├── haqida.php     ← sarlavha + menyu + mazmun + footer
└── aloqa.php      ← sarlavha + menyu + mazmun + footer

Uch faylda bir xil kod. Menyu o’zgarsa — uch joyni tahrirlash kerak.

Yechim: umumiy qismlarni ajratish

sayt/
├── index.php
├── haqida.php
└── qismlar/
    ├── sarlavha.php   ← <head>, menyu
    └── footer.php     ← pastki qism

index.php:

<?php include "qismlar/sarlavha.php"; ?>

<h1>Bosh sahifa</h1>
<p>Xush kelibsiz!</p>

<?php include "qismlar/footer.php"; ?>

include va require farqi

include require
Fayl topilmasa Ogohlantirish, kod davom etadi Fatal xato, kod to’xtaydi
Qachon Ixtiyoriy qism (reklama, banner) Majburiy qism (sozlama, funksiya)
PHP

_once versiyalari

Faraz qiling, funksiyalar.php ichida funksiya e’lon qilingan va u ikki marta qo’shildi:

require "funksiyalar.php";
require "funksiyalar.php";   // ❌ Fatal error: Cannot redeclare salom()

Funksiya va klass ikki marta e’lon qilinmaydi — PHP darhol to’xtaydi.

Yechim — _once versiyasi:

require_once "funksiyalar.php";
require_once "funksiyalar.php";   // ✅ ikkinchisi e'tiborsiz qoldiriladi
PHP

include_once va require_once faylni bir marta qo’shadi. Funksiya yoki klass e’loni bo’lgan fayllar uchun har doim _once versiyasini ishlating.

O’zgaruvchilar birga ishlaydi

Qo’shilgan fayl chaqiruvchi faylning o’zgaruvchilarini ko’radi:

sozlama.php:

<?php
$sayt_nomi = "LearnCode";
$yil = 2026;

index.php:

<?php
require "sozlama.php";
echo "$sayt_nomi$yil";   // LearnCode — 2026

Teskarisi ham ishlaydi: include dan oldin e’lon qilingan o’zgaruvchini qo’shilgan fayl ko’radi. Shablon shu tamoyilga qurilgan.

Shablon naqshi

PHP

ob_start() chiqishni buferga yig’adi, ob_get_clean() esa uni matn sifatida qaytaradi. Bu HTML shablonni funksiya ichida yozish imkonini beradi.

Fayl qaytaradigan qiymat

Sozlama fayllari uchun eng toza usul:

PHP
$sozlama = require "sozlama.php";

Global o’zgaruvchi yaratilmaydi — hamma narsa bitta massivda va nomlar to’qnashmaydi.

Yo’l muammosi

PHP

Amaliy tuzilma

Kichik loyihaning odatiy ko’rinishi:

loyiha/
├── public/              ← faqat shu papka internetga ochiq
│   ├── index.php
│   └── style.css
├── src/
│   ├── funksiyalar.php
│   └── baza.php
├── qismlar/
│   ├── sarlavha.php
│   └── footer.php
└── sozlama.php

public/index.php:

<?php
$sozlama = require __DIR__ . "/../sozlama.php";
require __DIR__ . "/../src/funksiyalar.php";

$sarlavha = "Bosh sahifa";
require __DIR__ . "/../qismlar/sarlavha.php";
?>

<h1>Xush kelibsiz</h1>

<?php require __DIR__ . "/../qismlar/footer.php"; ?>

Xavfsizlik

PHP

Autoload haqida

Katta loyihalarda har klass uchun require yozish charchatadi. Yechim — autoload: klass birinchi ishlatilganda PHP uni o’zi topib yuklaydi.

spl_autoload_register(function ($klass) {
    require __DIR__ . "/src/{$klass}.php";
});

$obyekt = new Talaba();   // src/Talaba.php avtomatik yuklanadi

Amalda buni Composer bajaradi — PHP’ning paket menejeri:

composer require monolog/monolog
require __DIR__ . "/vendor/autoload.php";

Bir qator bilan barcha kutubxona va o’z klasslaringiz yuklanadi.

Amaliy mashq

  1. include va require ni mavjud bo’lmagan faylda sinang;
  2. sarlavha va footer qismlarini alohida faylga ajrating;
  3. $sarlavha o’zgaruvchisini include dan oldin e’lon qilib ishlating;
  4. sozlama faylini return [...] shaklida yozing;
  5. __DIR__ bilan yo’lni to’g’rilang;
  6. ruxsat etilgan ro’yxat bilan xavfsiz sahifa tanlash yozing.

6-qadam eng muhim xavfsizlik qoidasini mustahkamlaydi.

Qisqacha xulosa

  • include/require boshqa fayl mazmunini shu joyga qo’yadi.
  • require fayl topilmasa to’xtatadi, include — davom etadi.
  • Funksiya va klass fayllari uchun _once versiyasini ishlating.
  • Qo’shilgan fayl chaqiruvchining o’zgaruvchilarini ko’radi.
  • Sozlama uchun return [...] + $s = require ... eng toza usul.
  • Yo’lni har doim __DIR__ bilan yozing.
  • Foydalanuvchi ma’lumotini hech qachon include qilmang — ruxsat etilgan ro’yxat ishlating.

Keyingi darsda xatolar bilan ishlashtry/catch va xatolarni boshqarish.

Bu dars foydali bo'ldimi?

marta ko'rildi