سطح B: فراخوانی هوشمند و فایلهای Config
در پروژههای پیچیده، فایل A فایل B را صدا میزند، فایل B فایل C را، و فایل C دوباره فایل A را! این حلقهها باعث خطاهای مرگبار میشوند. بیایید یاد بگیریم چطور جلوی آن را بگیریم.
۱. مشکل: تعریف مجدد (Redeclare Error)
فرض کنید در فایلی به نام functions.php تابعی دارید که قیمت را محاسبه میکند. اگر این فایل را اشتباهاً دو بار در صفحه require کنید، PHP خطا میدهد:
۲. راهحل: پسوند _once
PHP دو دستور هوشمند دارد: include_once و require_once.
- این دستورات قبل از وارد کردن فایل، چک میکنند که آیا این فایل قبلاً در این صفحه وارد شده است یا خیر؟
- اگر قبلاً وارد شده باشد، دستور نادیده گرفته میشود و هیچ خطایی رخ نمیدهد.
توصیه حرفهای:
برای فایلهایی که شامل توابع (Functions)، کلاسها یا تنظیمات (Config) هستند، همیشه از require_once استفاده کنید.
کارگاه عملی: فایل تنظیمات (Config)
بیایید یک "مرکز فرماندهی" کوچک برای سایتمان بسازیم.
config.php
<?php
// تنظیمات کلی سایت
$site_name = "فروشگاه موبایل";
$currency = "تومان";
$admin_email = "admin@example.com";
// یک تابع کمکی
function formatPrice($price) {
global $currency;
return number_format($price) . " " . $currency;
}
?>
product.php
<?php
// استفاده از _once برای اطمینان
require_once 'config.php';
// اگر اشتباهاً دوباره صدا بزنیم، هیچ خطایی رخ نمیدهد
require_once 'config.php';
echo "به " . $site_name . " خوش آمدید<br>";
echo "قیمت آیفون: " . formatPrice(50000000);
?>
تمرین و چالش
تمرین: تم قابل تغییر
- یک فایل
settings.phpبسازید و متغیر$theme_color = 'blue';را در آن بگذارید. - یک فایل
header.phpبسازید کهsettings.phpراrequire_onceمیکند. - در هدر، با استفاده از متغیر
$theme_color، رنگ پسزمینه منو را تغییر دهید (style="background-color: <?php echo $theme_color; ?>"). - حالا فایل
header.phpرا در فایل اصلی ایمپورت کنید. با تغییر رنگ در فایل ستینگ، باید ظاهر سایت عوض شود.
چالش هوش مصنوعی: دیباگینگ (عیبیابی)
سناریو: یک برنامهنویس تازهکار از require معمولی استفاده کرده و با خطای "Cannot redeclare function" مواجه شده است. اما او نمیداند دقیقاً کدام فایل را دو بار صدا زده است (چون فایلها تو در تو هستند).
تکلیف: از هوش مصنوعی بخواهید یک روش برای پیدا کردن لیست تمام فایلهایی که تا این لحظه اینکلود شدهاند به شما یاد بدهد.
(راهنمایی مخفی برای معلم: تابع get_included_files() پاسخ این سوال است).
پاسخ هوش مصنوعی و لیست فایلهای اینکلود شده در تمرین خودتان را چاپ کنید.