اولین کد PHP ای که نوشتم، یک خط ساده بود که فقط کلمه «سلام» را روی صفحه چاپ می کرد. آن روز، اگر کسی به من می گفت که همین زبان ساده، تا سال ها بعد بستر اصلی کار حرفه ای من می شود، باور نمی کردم. اما واقعیت این است که PHP، زبانی است که هم شروع ساده ای دارد و هم عمق بی پایانی؛ می توانید با آن یک اسکریپت کوچک بسازید و همان روز جواب بگیرید، یا سال ها در آن غرق شوید و هر روز چیز تازه ای یاد بگیرید. در این مقاله، همان مسیری را باز می کنم که خودم برای یادگیری PHP از صفر طی کردم؛ مسیری که از تجربه ی پروژه های واقعی بیرون آمده، نه از کتاب های دانشگاهی.

هدف این مقاله، آموزش سریع PHP برای WordPress نیست؛ برعکس، می خواهم از همان ابتدا، پایه ای را در ذهن شما بسازم که بعدا وقتی به وردپرس رسیدید، بفهمید که چرا هر خط کد آن کار می کند. اگر با وردپرس آشنا نیستید، پیشنهاد می کنم وردپرس چیست و چگونه شروع کنیم را در کنار این مقاله بخوانید؛ این دو، مکمل همدیگرند.

چرا هنوز PHP یاد بگیریم؟

وقتی از PHP حرف می زنم، بعضی افراد با تعجب می پرسند: «مگر PHP نمرده؟» این پرسش، از یک باور رایج می آید که PHP را زبانی قدیمی می بیند. اما واقعیت بازار، چیز دیگری می گوید. سه واقعیت که در پروژه های خودم به روشنی دیده ام:

  • بیش از ۷۰ درصد از کل وب، با PHP کار می کند. از وردپرس تا لاراول، از فروشگاه های کوچک تا سیستم های بزرگ سازمانی، PHP زبان اصلی بک اند در جهان است.
  • بازار کار ایران، به شدت PHP-محور است. اگر با وردپرس کار می کنید، اگر برای کسب و کارها سایت می سازید، یا اگر قصد دارید به توسعه دهنده ی بک اند تبدیل شوید، PHP یکی از سه مهارت اصلی است.
  • مسیر یادگیری PHP، ساده تر از زبان های مدرن است. برخلاف Node.js که نیازمند درک اکوسیستم جاوااسکریپت است، یا Go و Rust که مفاهیم پیشرفته ای دارند، PHP اجازه می دهد از روز اول، کد بنویسید و جواب بگیرید.

نکته ی مهم اینجاست: PHP در ده سال گذشته، تحول بزرگی داشته است. نسخه های ۷ و ۸، از نظر سرعت و امنیت، زمین تا آسمان با نسخه ی ۵ تفاوت دارند. اگر کسی به شما گفت «PHP کند است» یا «PHP امن نیست»، به احتمال زیاد دارد از تجربه ی نسخه ی ۵ حرف می زند. تجربه ی من این است که PHP مدرن، در پروژه های واقعی، سرعت و امنیتی هم رده با هر زبان بک اند دیگری ارائه می دهد.

PHP زبان شروع نیست؛ زبان ورود به دنیای وب است. اگر کسی این زبان را یاد بگیرد، نه فقط یک زبان، که اکوسیستم کاملی از فریم ورک ها، ابزارها و فرصت های شغلی را در اختیار می گیرد.

PHP دقیقا چیست و چه کار می کند؟

PHP یک زبان برنامه نویسی سمت سرور است. یعنی کد شما روی سرور اجرا می شود، نتیجه ی آن به مرورگر فرستاده می شود، و مرورگر فقط HTML نهایی را می بیند. برخلاف جاوااسکریپت که در مرورگر کاربر اجرا می شود، PHP روی سرور است و کاربر هیچ وقت کد آن را نمی بیند.

برای اینکه این تفاوت را بهتر بفهمید، به یک مثال ساده توجه کنید. فرض کنید یک کاربر روی دکمه ی «ورود» کلیک می کند. جاوااسکریپت، صحت فرم را در مرورگر بررسی می کند: آیا فیلد نام کاربری پر است؟ آیا رمز عبور حداقل ۸ کاراکتر دارد؟ سپس داده ی فرم به سرور فرستاده می شود. اینجاست که PHP وارد می شود: PHP نام کاربری و رمز را می گیرد، به دیتابیس وصل می شود، آن ها را با رکوردهای موجود مقایسه می کند، و اگر معتبر بودند، یک نشست برای کاربر ایجاد می کند. سپس یک پاسخ HTML به مرورگر برمی گرداند.

این دوگانگی، یکی از مهم ترین مفاهیمی است که در روز اول باید یاد بگیرید. اگر با آموزش جاوااسکریپت از صفر هم آشنا شوید، تصویر کاملی از تفاوت سمت سرور و سمت کلاینت به دست می آورید. این تفکیک، شالوده ی تمام ساختارهای وب مدرن است.

PHP در کنار HTML کار می کند. یعنی شما می توانید یک فایل با پسوند .php بسازید که هم HTML داشته باشد و هم کد PHP. سرور، بخش های PHP را اجرا می کند، نتیجه را جایگزین می کند، و فایل نهایی HTML را به مرورگر می فرستد. همین ویژگی ساده، دلیل محبوبیت بالای PHP در ساخت سایت های داینامیک است.

آماده سازی محیط کار

برای شروع کار با PHP، به سه چیز نیاز دارید: یک سرور وب، PHP، و MySQL (اگر می خواهید با دیتابیس کار کنید). نصب تک تک این ها روی سیستم، برای تازه کارها می تواند گیج کننده باشد. خوشبختانه، ابزارهای آماده ای وجود دارند که همه ی این ها را یکجا نصب می کنند. سه گزینه ی رایج:

ابزارسیستم عاملمناسب برای
XAMPPویندوز، مک، لینوکسشروع سریع، ساده ترین گزینه
MAMPویندوز، مکرابط گرافیکی بهتر، مناسب مک
Local by Flywheelویندوز، مک، لینوکسمخصوص وردپرس، مناسب توسعه

برای شروع، XAMPP پیشنهاد من است. بعد از نصب، پوشه ی htdocs در محل نصب XAMPP قرار می گیرد. تمام فایل های PHP شما باید در این پوشه قرار بگیرند. سپس از پنل XAMPP، سرویس Apache را روشن کنید و در مرورگر به آدرس http://localhost بروید. اگر صفحه ی خوش آمدگویی XAMPP را دیدید، همه چیز آماده است.

یک توصیه ی عملی: از همان روز اول، یک ادیتور کد حرفه ای نصب کنید. Notepad یا TextEdit برای کار جدی کافی نیستند. من در پروژه های خودم از VS Code استفاده می کنم؛ رایگان، سریع، و با افزونه های مفید. اگر با ابزارهای توسعه وردپرس هم کار می کنید، توسعه وردپرس چیست و از کجا شروع کنیم مسیر کاملی از ابزارها و روش ها را نشان می دهد.

اولین کد PHP

حالا وقت اولین کد است. در پوشه ی htdocs، یک فایل جدید با نام hello.php بسازید و کد زیر را در آن بنویسید:

<?php
echo 'سلام، این اولین کد PHP من است!';
?>

این کد را در مرورگر باز کنید: http://localhost/hello.php. باید جمله ی «سلام، این اولین کد PHP من است!» را روی صفحه ببینید. این سادگی، فریبنده است. همین یک خط، شالوده ی همه ی کارهای بعدی است.

سه نکته ی مهم در همین کد ساده:

  • تگ <?php: این تگ، شروع کد PHP را به سرور اعلام می کند. هر چیزی که بعد از این تگ بیاید، به عنوان PHP اجرا می شود.
  • دستور echo: این دستور، متن را به خروجی می فرستد. اگر در مرورگر باز شود، متن نمایش داده می شود؛ اگر در خط فرمان اجرا شود، در ترمینال چاپ می شود.
  • تگ ?>: پایان کد PHP. در فایل های خالص PHP، می توانید این تگ را حذف کنید. اما اگر بعد از کد PHP، HTML دارید، این تگ لازم است.

اگر با HTML آشنایی ندارید، پیشنهاد می کنم قبل از عمیق شدن در PHP، آموزش HTML از صفر را ببینید. چون در عمل، PHP و HTML همیشه با هم کار می کنند.

متغیرها و انواع داده

متغیر، ظرفی است که یک مقدار در آن ذخیره می کنید. در PHP، متغیرها با علامت $ شروع می شوند. مثلا:

$name = 'علی';
$age = 25;
$price = 149.99;
$is_active = true;

در این مثال، چهار متغیر با چهار نوع داده ی متفاوت داریم:

  • رشته (String): متن. با کوتیشن تکی یا دوتایی نوشته می شود.
  • عدد صحیح (Integer): عدد بدون اعشار.
  • عدد اعشاری (Float): عدد با اعشار.
  • بولین (Boolean): مقدار درست یا غلط. با true یا false.

PHP یک زبان «بدون تایپ صریح» است. یعنی لازم نیست از قبل بگویید که متغیر شما عدد است یا متن. PHP خودش بر اساس مقدار، نوع را تشخیص می دهد. این ویژگی، شروع کار را ساده می کند اما در پروژه های بزرگ، می تواند منبع باگ شود. برای همین، از PHP ۷ به بعد، این امکان به وجود آمده که بتوانید نوع متغیر را در توابع و کلاس ها صریح تعیین کنید. من در پروژه های خودم، همیشه از این امکان استفاده می کنم؛ چون خطاهای ناشی از نوع داده را در همان مرحله ی نوشتن کد می گیرد.

یک نکته ی ظریف درباره ی رشته ها: در PHP، کوتیشن تکی و دوتایی فرق دارند. در کوتیشن دوتایی، متغیرها تفسیر می شوند؛ در کوتیشن تکی، نه. مثال:

$name = 'علی';
echo 'سلام $name';  // خروجی: سلام $name
echo "سلام $name";   // خروجی: سلام علی

این تفاوت کوچک، در پروژه های واقعی چندین بار باعث باگ شده است. اگر می خواهید رشته ای با متغیر داشته باشید، از کوتیشن دوتایی استفاده کنید؛ در غیر این صورت، از کوتیشن تکی استفاده کنید تا سرعت بیشتری بگیرید.

متغیر، نامی است که به یک مقدار می دهید. چالش اصلی این نیست که چطور مقدار را ذخیره کنید؛ چالش اصلی این است که نام درستی انتخاب کنید. کد خوب، کدی است که وقتی فردا به آن نگاه می کنید، نام متغیرها خودشان توضیح دهند.

عملگرها و منطق

عملگرها، ابزار کار با مقادیر هستند. در PHP، چهار دسته ی اصلی عملگر داریم:

عملگرهای ریاضی: + برای جمع، - برای تفریق، * برای ضرب، / برای تقسیم، % برای باقی مانده. مثال:

$total = 100 + 50;      // 150
$discount = 100 - 20;   // 80
$tax = 100 * 0.09;      // 9
$share = 100 / 4;       // 25
$remainder = 10 % 3;    // 1

عملگرهای مقایسه: == برای برابری (بدون نوع)، === برای برابری دقیق (با نوع)، != برای نابرابری، >، <، >=، <=. تفاوت == و ===، یکی از پرتکرارترین دام های تازه کارهاست. مثال:

var_dump( 5 == '5' );    // true  - مقایسه بدون توجه به نوع
var_dump( 5 === '5' );   // false - مقایسه با توجه به نوع

تجربه ی من این است که در پروژه های واقعی، همیشه از === استفاده کنید مگر اینکه دلیل خاصی داشته باشید. این عادت، از ده ها باگ پنهان جلوگیری می کند.

عملگرهای منطقی: && برای «و»، || برای «یا»، ! برای «نه». مثال:

$is_logged_in = true;
$is_admin = false;

if ( $is_logged_in && $is_admin ) {
    echo 'خوش آمدید، مدیر';
} elseif ( $is_logged_in ) {
    echo 'خوش آمدید، کاربر';
} else {
    echo 'لطفا وارد شوید';
}

عملگرهای رشته: . برای الحاق دو رشته:

$first_name = 'علی';
$last_name = 'محمدی';
$full_name = $first_name . ' ' . $last_name;  // علی محمدی

نکته ی ظریف اینجاست که علامت . برای الحاق رشته ها با علامت + برای جمع اعداد قابل اشتباه است. اگر عدد را با رشته جمع کنید، PHP خودش تبدیل می کند اما رفتار غیرقابل پیش بینی می شود. تجربه ی من: همیشه صریح بنویسید.

ساختارهای کنترلی: if و حلقه ها

ساختارهای کنترلی، ابزار تصمیم گیری و تکرار در کد هستند. در PHP، سه ساختار اصلی داریم:

شرط if و elseif و else: برای تصمیم گیری. اگر شرطی درست بود، یک بلوک اجرا می شود؛ در غیر این صورت، بلوک دیگر. مثال کاربردی که در پروژه های فروشگاهی زیاد می بینید:

$order_total = 150000;

if ( $order_total > 500000 ) {
    $shipping = 0;             // ارسال رایگان
} elseif ( $order_total > 200000 ) {
    $shipping = 30000;         // ارسال با تخفیف
} else {
    $shipping = 50000;         // ارسال عادی
}

حلقه for: وقتی تعداد تکرار مشخص است. مثال: چاپ اعداد ۱ تا ۱۰:

for ( $i = 1; $i <= 10; $i++ ) {
    echo $i . ' ';
}

حلقه foreach: وقتی می خواهید روی اجزای یک آرایه حرکت کنید. این پرکاربردترین حلقه در PHP است:

$fruits = array( 'سیب', 'موز', 'پرتقال' );

foreach ( $fruits as $fruit ) {
    echo $fruit . '
'; }

حلقه while: وقتی تعداد تکرار مشخص نیست و به شرط بستگی دارد:

$counter = 0;
while ( $counter < 5 ) {
    echo $counter . ' ';
    $counter++;
}

یک نکته ی مهم در حلقه ها: همیشه باید یک شرط پایان داشته باشند. حلقه ی بی پایان، یکی از رایج ترین اشتباهات تازه کارهاست که می تواند سرور را از کار بیندازد. تجربه ی من: قبل از نوشتن هر حلقه، شرط پایانش را یادداشت کنید.

توابع: از تکرار تا انتزاع

تابع، یک بلوک کد است که یک کار مشخص انجام می دهد و می توانید چند بار از آن استفاده کنید. توابع، ابزار اصلی کاهش تکرار در کد هستند. مثال ساده:

function greet( $name ) {
    return 'سلام، ' . $name . '!';
}

echo greet( 'علی' );      // سلام، علی!
echo greet( 'مریم' );     // سلام، مریم!

در این مثال، تابع greet یک پارامتر (ورودی) می گیرد و یک مقدار (خروجی) برمی گرداند. مهم ترین بخش یک تابع، کلمه ی return است. اگر تابع چیزی برنگرداند، مقدار پیش فرض null را برمی گرداند.

توابع در PHP دو نوع هستند: توابعی که خودتان می نویسید، و توابعی که PHP به صورت داخلی دارد. تعداد توابع داخلی PHP بسیار زیاد است و هر کدام یک کار مشخص انجام می دهند. چند نمونه ی پرکاربرد:

تابعکارکرد
strlen()طول یک رشته را برمی گرداند
str_replace()یک بخش از رشته را با بخش دیگر جایگزین می کند
count()تعداد اجزای یک آرایه را می شمارد
implode()اجزای آرایه را با یک جداکننده به رشته تبدیل می کند
explode()یک رشته را با جداکننده به آرایه تبدیل می کند
trim()فاصله های اضافی ابتدا و انتهای رشته را حذف می کند
date()تاریخ و ساعت فعلی را برمی گرداند
htmlspecialchars()کاراکترهای خاص HTML را ایمن می کند

یک عادت حرفه ای: از همان روز اول، توابع خودتان را طوری بنویسید که یک کار مشخص انجام دهند و نام شان آن کار را توصیف کند. تابعی به نام process_data() که ده کار مختلف انجام می دهد، بدتر از ده تابع کوچک با نام های واضح است. این اصل، پایه ی کد تمیز است و در پروژه های بزرگ، تفاوت بین کد قابل نگهداری و کد فاجعه را می سازد.

تابع، واحد کوچک تفکر در برنامه نویسی است. هر تابع، یک تصمیم را در خود پنهان می کند. تابع خوب، آن چیزی است که اگر هفته ی بعد آن را باز کنید، باز هم بفهمید چه کار می کند.

آرایه ها و داده های ساختاریافته

آرایه، مجموعه ای از مقادیر است که با یک نام مشترک ذخیره می شوند. در PHP، آرایه ها بسیار انعطاف پذیرند و دو نوع اصلی دارند:

آرایه ی عددی: اجزا با کلید عددی، شروع از صفر:

$fruits = array( 'سیب', 'موز', 'پرتقال' );

echo $fruits[0];    // سیب
echo $fruits[1];    // موز
echo $fruits[2];    // پرتقال

آرایه ی انجمنی: اجزا با کلید رشته ای:

$person = array(
    'name' => 'علی',
    'age'  => 25,
    'city' => 'تهران'
);

echo $person['name'];    // علی
echo $person['age'];     // 25
echo $person['city'];    // تهران

از PHP ۵.۴ به بعد، می توانید از سینتکس کوتاه تر [ ] به جای array( ) استفاده کنید:

$fruits = [ 'سیب', 'موز', 'پرتقال' ];

$person = [
    'name' => 'علی',
    'age'  => 25,
    'city' => 'تهران'
];

آرایه ها در پروژه های واقعی، تقریبا همه جا هستند. داده های یک کاربر، داده های یک محصول، فهرست سفارش ها — همه با آرایه ذخیره می شوند. اگر با وردپرس کار می کنید، می بینید که بسیاری از توابع آن، خروجی آرایه یا آبجکت دارند. تسلط بر آرایه ها، یکی از کلیدهای کار حرفه ای با PHP است.

چند تابع پرکاربرد برای کار با آرایه ها: array_push() برای اضافه کردن به انتهای آرایه، array_pop() برای حذف از انتهای آرایه، array_keys() برای گرفتن کلیدها، array_values() برای گرفتن مقادیر، in_array() برای بررسی وجود یک مقدار، و sort() برای مرتب سازی. برای مرتب سازی آرایه های انجمنی، asort() (بر اساس مقدار) و ksort() (بر اساس کلید) را ببینید.

Superglobal ها و دریافت داده از فرم

در PHP، چند متغیر خاص وجود دارند که در همه ی بخش های کد قابل دسترسی هستند و به آن ها Superglobal می گویند. مهم ترین شان برای شروع کار:

نامکارکرد
$_GETداده های ارسالی از طریق URL (پارامترهای query string)
$_POSTداده های ارسالی از طریق فرم با متد POST
$_REQUESTترکیبی از GET و POST و COOKIE
$_SESSIONداده های نشست کاربر
$_COOKIEداده های کوکی مرورگر
$_FILESفایل های آپلودشده از طریق فرم
$_SERVERاطلاعات سرور و درخواست

مثال عملی: یک فرم ساده که نام کاربر را می گیرد و به صفحه ی خوش آمدگویی می فرستد. فایل اول، فرم:

<form action="welcome.php" method="post">
    <input type="text" name="username">
    <button type="submit">ارسال</button>
</form>

فایل دوم، welcome.php:

<?php
if ( isset( $_POST['username'] ) ) {
    $username = trim( $_POST['username'] );
    $username = htmlspecialchars( $username );
    echo 'سلام، ' . $username . '!';
} else {
    echo 'نام کاربری وارد نشده است.';
}
?>

در این مثال، سه نکته ی مهم وجود دارد. اول، استفاده از isset() برای بررسی اینکه داده ارسال شده یا نه. دوم، استفاده از trim() برای حذف فاصله های اضافی. سوم، استفاده از htmlspecialchars() برای جلوگیری از حملات XSS. این سه عادت، پایه ی کد امن در PHP هستند. اگر با مفهوم حملات XSS آشنا نیستید، امنیت وب چیست و چه اصولی دارد نقطه ی شروع دقیقی است.

اتصال به دیتابیس با PDO

وقتی در PHP پیشرفت کردید، به مرحله ی اتصال به دیتابیس می رسید. اینجا جایی است که سایت شما از یک مجموعه ی صفحات استاتیک به یک برنامه ی پویا تبدیل می شود. PHP دو روش اصلی برای اتصال به MySQL دارد: mysqli و PDO. تجربه ی من: از همان ابتدا با PDO شروع کنید. دلایل:

  • پشتیبانی از چند دیتابیس: PDO با MySQL، PostgreSQL، SQLite و چند دیتابیس دیگر کار می کند.
  • امنیت بالاتر: Prepared Statements در PDO، به طور پیش فرض جلوی SQL Injection را می گیرد.
  • رابط شی گرا: PDO با سینتکس شی گرا نوشته می شود که بعدا با شی گرایی PHP هم خوانی دارد.

مثال ساده ی اتصال با PDO:

<?php
try {
    $pdo = new PDO(
        'mysql:host=localhost;dbname=my_db;charset=utf8mb4',
        'username',
        'password'
    );
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch ( PDOException $e ) {
    die( 'خطا در اتصال: ' . $e->getMessage() );
}
?>

و یک مثال از گرفتن داده از دیتابیس با Prepared Statement:

$stmt = $pdo->prepare( 'SELECT * FROM users WHERE email = :email' );
$stmt->execute( [ ':email' => 'ali@example.com' ] );
$user = $stmt->fetch( PDO::FETCH_ASSOC );

if ( $user ) {
    echo 'نام کاربر: ' . $user['name'];
}

سه نکته ی مهم در این کد: استفاده از try/catch برای مدیریت خطاهای اتصال، استفاده از Prepared Statement برای جلوگیری از SQL Injection، و استفاده از :email به عنوان placeholder. این سه، پایه ی کار با دیتابیس در PHP حرفه ای هستند. اگر می خواهید پایه ی دیتابیس را عمیق تر یاد بگیرید، آموزش MySQL از صفر مکمل این بخش است.

در PHP، اتصال به دیتابیس، نقطه ی ورود شما به دنیای اپلیکیشن های واقعی است. از این نقطه به بعد، کد شما دیگر «یک صفحه» نیست، «یک برنامه» است — برنامه ای که با داده کار می کند.

شی گرایی: گام بعدی

شی گرایی (Object-Oriented Programming یا OOP)، یک پارادایم برنامه نویسی است که کد شما را در قالب کلاس ها و آبجکت ها سازماندهی می کند. اگر در PHP پیشرفت کردید و پروژه های بزرگ ساختید، حتما به شی گرایی نیاز پیدا می کنید. دلایل این نیاز:

  • سازماندهی بهتر: به جای صدها تابع پراکنده، ده ها کلاس مسئولیت دارید.
  • قابلیت استفاده ی مجدد: کلاس ها می توانند از هم ارث ببرند و کد را دوباره استفاده کنند.
  • هم خوانی با وردپرس و فریم ورک ها: وردپرس، لاراول، و اکثر فریم ورک های مدرن PHP، شی گرا هستند.

مثال ساده ی یک کلاس:

class User {
    private $name;
    private $email;

    public function __construct( $name, $email ) {
        $this->name  = $name;
        $this->email = $email;
    }

    public function greet() {
        return 'سلام، ' . $this->name;
    }

    public function getEmail() {
        return $this->email;
    }
}

$ali = new User( 'علی', 'ali@example.com' );
echo $ali->greet();    // سلام، علی

در این کد، User یک کلاس است که دو ویژگی (name و email) و دو متد (greet و getEmail) دارد. $ali یک نمونه (آبجکت) از این کلاس است.

شی گرایی، موضوعی است که یک کتاب کامل می طلبد و در این مقاله فقط می توانم به آن اشاره کنم. اما اگر می خواهید به عنوان یک توسعه دهنده ی حرفه ای کار کنید، شی گرایی را در اولویت یادگیری بعدی خود قرار دهید. اگر با وردپرس کار می کنید، در هوک های وردپرس چیستند و چگونه کار می کنند و نحوه استفاده صحیح از هوک های وردپرس خواهید دید که شی گرایی چگونه در عمل استفاده می شود.

PHP و وردپرس: نسبت این دو

یکی از پرتکرارترین پرسش های تازه کارها: «برای کار با وردپرس، باید PHP را کامل یاد بگیرم؟» پاسخ صادقانه این است: نه، ولی باید به مقدار کافی یاد بگیرید تا بتوانید کد وردپرس را بفهمید و در آن دست ببرید.

وردپرس با PHP نوشته شده است. قالب ها، افزونه ها، هسته ی وردپرس — همه PHP هستند. اما این به معنای آن نیست که برای استفاده از وردپرس باید یک توسعه دهنده ی PHP باشید. دو سطح کار با وردپرس:

سطح اول — کاربر وردپرس: کسی که با پیشخوان کار می کند، افزونه نصب می کند، و قالب انتخاب می کند. برای این سطح، نیازی به دانش PHP نیست.

سطح دوم — توسعه دهنده ی وردپرس: کسی که قالب می سازد، افزونه می نویسد، یا سایت را سفارشی می کند. برای این سطح، PHP یک مهارت ضروری است.

تجربه ی من این است که برای ورود به سطح دوم، لازم نیست همه ی PHP را بلد باشید. کافی است مبانی را بلد باشید، بقیه را در عمل یاد بگیرید. برای شروع کار توسعه با وردپرس، توسعه وردپرس چیست و از کجا شروع کنیم و کدنویسی وردپرس چیست و از کجا شروع کنیم دو مقاله ی کلیدی هستند. همچنین، برای دیدن یک مثال عملی از کد PHP در وردپرس، ساخت شورت کد با کدنویسی وردپرس را ببینید.

گام بعدی: نقشه ی ادامه ی مسیر

بعد از این که مبانی را یاد گرفتید، باید بدانید که کدام مسیر را ادامه دهید. در تجربه ی من، سه مسیر اصلی برای یک تازه کار PHP وجود دارد:

مسیر اول — توسعه ی وردپرس: اگر هدف شما ساخت سایت با وردپرس است، بعد از این مقاله، سراغ یادگیری ساختار وردپرس، هوک ها، و API آن بروید. مسیر کامل در توسعه وردپرس چیست و از کجا شروع کنیم آمده است. این مسیر، سریع ترین مسیر ورود به بازار کار وب در ایران است.

مسیر دوم — فریم ورک های PHP: اگر هدف شما ساخت اپلیکیشن های مستقل است، سراغ لاراول بروید. لاراول، محبوب ترین فریم ورک PHP است و اکوسیستم بزرگی دارد. برای شروع، مبانی شی گرایی و Composer ضروری است.

مسیر سوم — تخصص در یک حوزه: مثلا کار با API ها، ساخت ربات ها، یا ساخت سیستم های خاص. این مسیر، نیازمند دانش پیشرفته تری است و معمولا بعد از دو یا سه سال کار عملی شروع می شود.

در هر سه مسیر، یک توصیه ی مشترک دارم: پروژه بسازید. یادگیری PHP بدون پروژه، شبیه یادگیری شنا بدون آب است. یک پروژه ی کوچک — مثلا یک دفترچه تلفن ساده، یک سیستم ثبت نام، یا یک بلاگ شخصی — انتخاب کنید و بسازید. در جریان ساخت، خیلی از مفاهیم خودشان جا می افتند.

و یک نکته ی مهم: از همان روز اول، از Git برای مدیریت کد خود استفاده کنید. حتی اگر پروژه ی کوچکی است، تجربه ی مدیریت نسخه، در پروژه های بزرگ تر حیاتی می شود. مسیر شروع در آموزش Git از صفر آمده است.

اشتباهات رایج در یادگیری PHP

در سال ها کار با توسعه دهندگان تازه کار، الگوهای مشخصی از اشتباهات را دیده ام. جدول زیر، رایج ترین این اشتباهات را با راه حل شان نشان می دهد:

اشتباهپیامدروش درست
یادگیری بدون پروژهدانش سطحی، بدون مهارت عملیساخت پروژه های کوچک از روز اول
پرش سریع به فریم ورکعدم درک مبانی، وابستگی به فریم ورکاول مبانی، سپس فریم ورک
نادیده گرفتن امنیتسایت آسیب پذیر در برابر حملاتیادگیری اصول امنیت از همان ابتدا
استفاده از == به جای ===باگ های پنهان در مقایسه هاهمیشه ===، مگر دلیل خاص
نادیده گرفتن پیام های خطااشتباهات تکرارشوندهخواندن دقیق خطا، فهم ریشه
کپی کردن کد بدون فهمعدم توانایی در حل مشکلات جدیدفهم خط به خط، سپس استفاده
نادیده گرفتن استانداردهای کدکد غیرقابل نگهدارییادگیری PSR از ابتدا
عدم استفاده از کنترل نسخهاز دست دادن کد در صورت خرابیشروع Git از روز اول

یک نکته ی ظریف: بزرگ ترین اشتباه، «پرش از روی مبانی» است. من در پروژه های خودم دیده ام که توسعه دهندگانی که فریم ورک را قبل از مبانی یاد گرفتند، در حل مسائل پیچیده ضعیف تر هستند. دلیلش ساده است: بدون فهم پایه، نمی توانند ریشه ی مشکل را تشخیص دهند. پس توصیه ی من: صبر کنید. مبانی را جدی بگیرید، حتی اگر کمی کند به نظر برسد.

عادت هایی که یک PHP کار حرفه ای را می سازد

بعد از یادگیری مبانی، تفاوت بین یک توسعه دهنده ی متوسط و یک توسعه دهنده ی حرفه ای، در عادت هاست. پنج عادتی که در پروژه های خودم به آن ها پایبندم:

عادت اول — نام گذاری دقیق: متغیرها و توابع خود را طوری نام گذاری کنید که کد، خودش را توضیح دهد. یک تابع به نام get_active_users() بهتر از gau() است. این عادت، در بلندمدت، ساعت ها وقت شما را در نگهداری کد نجات می دهد.

عادت دوم — کد کوچک، تابع کوچک: هر تابع، فقط یک کار انجام دهد. اگر تابع شما بیش از ۳۰ خط است، احتمالا دارد بیش از یک کار انجام می دهد. توابع کوچک، تست پذیرتر، قابل فهم تر، و قابل نگهداری تر هستند.

عادت سوم — کامنت گذاری هدفمند: کامنت ها نه برای توضیح «چه» بلکه برای توضیح «چرا» هستند. یعنی اگر کدی پیچیده است، کامنت توضیح دهد که چرا این روش انتخاب شده است، نه اینکه هر خط چه کاری می کند. کد خوب، خودش می گوید چه کاری می کند.

عادت چهارم — تست نوشتن: از همان روز اول، یاد بگیرید که تست بنویسید. حتی تست های ساده. ابزار PHPUnit در اکوسیستم PHP، تست نویسی را بسیار ساده می کند. تجربه ی من: پروژه هایی که از همان ابتدا تست داشته اند، در بلندمدت باگ های کمتری داشته اند.

عادت پنجم — مطالعه کد دیگران: یکی از سریع ترین راه های یادگیری، خواندن کد پروژه های متن باز است. وردپرس، لاراول، و ده ها پروژه ی متن باز دیگر، منبع ارزشمندی از الگوهای حرفه ای هستند. هر بار که کد یک پروژه ی متن باز را می خوانم، چیزی یاد می گیرم.

حرفه ای شدن در PHP، نه به خاطر دانستن همه ی توابع آن است، که به خاطر عادت های درست در نوشتن کد است. کد خوب، کدی است که شش ماه بعد هم قابل فهم و قابل تغییر باشد.

جمع بندی و مسیر پیش رو

یادگیری PHP از صفر، یک مسیر مشخص دارد: از راه اندازی محیط، به مبانی زبان، به کار با دیتابیس، به شی گرایی، و در نهایت به تخصص در یک حوزه. در این مقاله، گام های اصلی این مسیر را باز کردم. تجربه ی من این است که اگر این ترتیب را حفظ کنید و در هر مرحله، پروژه ی کوچکی بسازید، در طول چند ماه به سطح قابل قبولی از مهارت می رسید.

سه نکته ی کلیدی که بارها در این مقاله تکرار شد و ارزش تکرار دارد: اول، مبانی را جدی بگیرید و از پرش سریع به فریم ورک پرهیز کنید. دوم، امنیت را از همان روز اول یاد بگیرید — نه به عنوان یک مبحث پیشرفته، که به عنوان بخشی از هر خط کد. سوم، پروژه بسازید؛ چون یادگیری بدون پروژه، شبیه یادگیری شنا بدون آب است.

اگر در مسیر یادگیری PHP به نکته ی جالبی رسیدید یا سوالی داشتید، خوشحال می شوم در دیدگاه ها بخوانم. به ویژه اگر تجربه ی تان از یک پروژه ی واقعی است — مثلا یک باگ که هفته ها وقت تان را گرفت یا یک راه حل خلاقانه که در هیچ آموزشی ندیدید — همان جزئیات برای خواننده ی بعدی از هر راهنمای عمومی ارزشمندتر است. اگر هم به دنبال ادامه ی مسیر هستید، کدنویسی وردپرس چیست و از کجا شروع کنیم و توسعه وردپرس چیست و از کجا شروع کنیم دو گام منطقی بعدی هستند. 💻