تضمين الملفات واستلزامها
قسّموا الصفحات إلى أجزاء قابلة لإعادة الاستخدام باستخدام include وrequire
تضمين الملفات واستلزامها درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
إعادة استخدام التعليمات البرمجية بتضمين الملفات
توفر PHP أربع تعليمات لتضمين التعليمات البرمجية من ملفات أخرى:
include— يضمّن الملف؛ ويصدر تحذيرًا إذا كان مفقودًاrequire— يضمّن الملف؛ ويصدر خطأً قاتلًا إذا كان مفقودًاinclude_once— يضمّن الملف فقط إذا لم يكن مضمنًا من قبلrequire_once— يطلب الملف فقط إذا لم يكن مضمنًا من قبل
include وrequire
الفرق الأساسي: يؤدي فقدان ملف require إلى خطأ قاتل، بينما يؤدي فقدان ملف include إلى إصدار تحذير فقط:
<?php
// Fatal error if missing — use for critical files
require 'config.php';
require 'database.php';
// Warning if missing, but execution continues
include 'optional_plugin.php';
// Use __DIR__ for reliable relative paths:
require __DIR__ . '/helpers/utils.php';include_once وrequire_once
تمنع الصيغ التي تنتهي بـ _once تضمين الملف نفسه عدة مرات:
<?php
// Without _once: including twice redefines functions
include 'functions.php';
include 'functions.php'; // Fatal: function redefined!
// With _once: second include is a no-op
require_once 'functions.php';
require_once 'functions.php'; // safe — skipped
// Rule: use require_once for class and function definition filesنطاق المتغيرات في الملفات المضمّنة
تشترك الملفات المضمّنة في نطاق الملف الذي يضمّنها — ولكنها لا تشترك في نطاق الدالة:
<?php
// main.php
$title = 'My Site';
require 'header.php'; // header.php can use $title
// But in a function:
function loadTemplate(): void {
require 'header.php'; // $title is NOT accessible here!
// Must pass data explicitly
}إرجاع قيم من الملفات المضمّنة
يمكن للملفات المضمّنة إرجاع قيم باستخدام تعليمة return:
<?php
// config.php content:
// return ['debug' => true, 'db_host' => 'localhost'];
// main.php:
$config = require 'config.php';
echo $config['db_host']; // localhost
// Common pattern for configuration files that return arraysإنشاء تخطيط بسيط
قسّم الصفحة إلى ملفات قابلة لإعادة الاستخدام للرأس والمحتوى والتذييل:
<?php
// index.php
$pageTitle = 'Home Page';
$bodyClass = 'home';
require_once 'partials/header.php';
?>
<main class="container">
<h1>Welcome!</h1>
<p>Main content goes here.</p>
</main>
<?php require_once 'partials/footer.php'; ?>أجزاء القوالب
أنشئ ملفات عروض جزئية قابلة لإعادة الاستخدام للمكوّنات المتكررة:
<?php
// partials/card.php
// Expects: $card['title'], $card['body'], $card['url']
?>
<div class="card">
<h3><a href="<?= htmlspecialchars($card['url']) ?>">
<?= htmlspecialchars($card['title']) ?>
</a></h3>
<p><?= htmlspecialchars($card['body']) ?></p>
</div>تمرير المتغيرات إلى الأجزاء
مرّر البيانات إلى جزء من خلال إسنادها إلى متغير محلي قبل التضمين:
<?php
$articles = getArticles();
foreach ($articles as $article) {
$card = [
'title' => $article['title'],
'body' => substr($article['body'], 0, 100) . '...',
'url' => '/articles/' . $article['slug'],
];
require 'partials/card.php';
}include مقابل التحميل التلقائي
في PHP الحديثة مع Composer، تُحمّل ملفات الفئات تلقائيًا — ولا تحتاج إلى تضمينها يدويًا:
<?php
// Old way (manual includes):
require 'classes/User.php';
require 'classes/Post.php';
// Modern way (Composer autoloading):
require __DIR__ . '/vendor/autoload.php';
// Classes are loaded automatically when first used
$user = new User(); // User.php loaded by autoloader
$post = new Post(); // Post.php loaded by autoloaderالأمان: منع اجتياز المسارات
لا تضمّن أبدًا ملفات استنادًا إلى إدخال مستخدم لم يُتحقق منه:
<?php
// DANGEROUS:
$page = $_GET['page'];
include $page . '.php'; // allows ../../etc/passwd
// SAFE: whitelist allowed pages
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
if (!in_array($page, $allowed)) {
$page = 'home';
}
include __DIR__ . '/pages/' . $page . '.php';تهيئة include_path
هيّئ include_path في PHP بحيث يمكنك تضمين الملفات من دون مسارات كاملة:
<?php
// Current include_path:
echo get_include_path();
// Add your library directory:
set_include_path(
get_include_path() . PATH_SEPARATOR . '/var/www/lib'
);
// Now you can include without full path:
include 'helpers.php'; // found in /var/www/lib/helpers.phpتحقق سريع
ما الفرق بين include وrequire عند فقدان الملف؟
مراجعة: تضمين الملفات
الملخص:
require— خطأ قاتل عند فقدان الملف؛ ويُستخدم للملفات المهمةinclude— تحذير عند فقدان الملف؛ ويُستخدم للملفات الاختيارية- تمنع الصيغ التي تنتهي بـ _once التحميل المزدوج
- تشترك الملفات المضمّنة في نطاق متغيرات المستدعي
- يمكن للملفات إرجاع قيم باستخدام
return - لا تضمّن أبدًا مسارات مأخوذة من إدخال المستخدم — استخدم قائمة مسموح بها فقط
الأسئلة الشائعة
هل درس «تضمين الملفات واستلزامها» مجاني؟
نعم — نص درس «تضمين الملفات واستلزامها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «تضمين الملفات واستلزامها»؟
قسّموا الصفحات إلى أجزاء قابلة لإعادة الاستخدام باستخدام include وrequire تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «تضمين الملفات واستلزامها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- وسوم PHP وبنية التضمين
- إنشاء HTML ديناميكي باستخدام حلقات PHP
- تضمين الملفات واستلزامها
- نمط القوالب: فصل المنطق عن العرض