متغیرها (PHP Variables)
متغیرها: کانتینرهایِ هوشمندِ داده 📦💎
متغیرها در PHP با علامتِ $ شروع میشوند. آنها مانند ظرفهایی هستند که مقادیر را در حافظه نگه میدارند تا در جاهایِ مختلف از آنها استفاده کنیم.
قوانینِ نامگذاری متغیرها:
- حتماً باید با
$شروع شود. - باید با حرف یا
_شروع شود، نه عدد. - فقط شامل حروف، اعداد و
_است. - حساس به حروف:
$ageبا$AGEمتفاوت است.
حوزهیِ متغیرها (Scope) 🔭
اینجا جایی است که PHP کمی متفاوت عمل میکند. ۳ نوع حوزه داریم:
- Local: تعریف شده داخل تابع (بیرون در دسترس نیست).
- Global: تعریف شده بیرون از تابع (داخلِ تابع در دسترس نیست مگر با کلمه
global). - Static: متغیری که بعد از اتمام تابع، مقدارش را نگه میدارد.
استفاده از کلیدواژه Global:
{code_block('$x = 5;\nfunction test() {\n global $x;\n echo $x; // حالا به متغیر بیرون دسترسی داریم\n}')}$GLOBALS['variable_name'] ذخیره میشوند.
بخش تخصصی: کالبدشکافی زبان PHP و موتور Zend 🐘⚙️
درکِ عمیقِ PHP نیازمند آشنایی با آن چیزی است که در پشتِ صحنه اتفاق میافتد. PHP یک زبانِ تفسیری (Interpreted) است که توسط موتور قدرتمند Zend Engine اجرا میشود.
۱. چرخه عمر درخواست (Request Lifecycle)
در هر بار لود شدنِ صفحه، PHP مراحلِ زیر را طی میکند:
- Lexing/Scanning: تبدیلِ کدها به توکنهایِ معنادار.
- Parsing: ساختِ یک ساختارِ درختی از کدها (AST).
- Compilation: تبدیلِ درختِ کد به OpCodes (دستورالعملهایِ سطحِ پایین).
- Execution: اجرایِ OpCodeها توسط مفسرِ Zend.
۲. مدیریت حافظه (Zend Memory Manager)
PHP برخلافِ زبانهایی مثل C، مدیریتِ حافظه را به صورتِ خودکار انجام میدهد. با استفاده از تکنیکِ Reference Counting و یک Garbage Collector هوشمند، اشیاء و متغیرهایی که دیگر استفاده نمیشوند را از حافظه پاک میکند تا سرور دچارِ کراش نشود.
۳. سیستمِ تایپِ پویا (Dynamic Typing)
در PHP، متغیرها نوعِ ثابتی ندارند. این انعطافپذیری به لطفِ ساختارِ دادهای به نام zval (Zend Value) ممکن شده است که در هر لحظه میتواند اطلاعاتی درباره نوع و مقدارِ داده را در خود نگه دارد.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک متغیر به نام myVar تعریف کنید و مقدار عددی 100 را به آن بدهید. سپس آن را با echo چاپ کنید.
<?php
$myVar = 100;
echo $myVar;
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.