در تلاش برای کمک به یک همکار متوجه شدم منابع کمی برای افرادی که در حال حاضر برنامهنویس زبانهای دیگر هستند، به منظور یادگیری PHP وجود دارد. منظورم منبعیست که در سطح مبتدی نباشد و فقط مفاهیم اولیه برنامهنویسی را توضیح ندهد.
این چیزی بود که مرا وادار به نوشتن این مقاله کرد. در اینجا یک مرور سطح بالا از زبان PHP و همچنین برخی منابع بررسی شده برای راه اندازی و یادگیری بیشتر خواهیم داشت.
تنظیم محیط توسعه محلی
حتی اگر هم قرار نیست از فریمورکهایی مانند Symfony یا Laravel استفاده کنید، اما محیطی را راه اندازی کنید که بتواند این فریمورکها را اجرا کند. با این کار همه چیز را که برای توسعه PHP نیاز دارید، در اختیار خواهید داشت. اینها عبارتند از:
- PHP - زبان برنامهنویسی
- MySQL - پایگاه داده
- NGINX یا Apache - وب سرور
- Composer - پکیج منجر
آیا ماشین مجازی نیاز دارید؟ توصیه میکنم از Homestead که برای توسعه PHP سفارشی سازی شده است، بهره بگیرید (من خودم از این استفاده میکنم).
آیا با داکر کار میکنید؟ به لینکهای زیر مراجعه نمایید:
/https://laradock.io
https://www.digitalocean.com/community/tech_talks/how-to-create-php-developer-environments-with-docker-compose
آیا وب سرور محلی میخواهید؟ XAMPP یکی از محبوبترین گزینهها است. این یک توزیع Apache با MariaDB و PHP است.
اگر قبلا Apache یا NGINX را به صورت لوکال نصب کردهاید و دوست دارید توسعه محلی را بدون ماشین مجازی انجام دهید، میتوانید PHP را نصب کنید و به محبوبترین افزونههای آن به طور مستقیما دسترسی داشته باشید. این دستوراتی است که من در اوبونتو (لینوکس) برای نصب PHP استفاده میکنم:
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update
sudo apt install -y php7.4 php7.4-common php7.4-cli php7.4-fpm libapache2-mod-php7.4 php-pear php7.4-bcmath php7.4-bz2 php7.4-curl php7.4-dev php7.4-gd php7.4-intl php-gettext php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-soap php7.4-sqlite3 php-xdebug php7.4-xml php7.4-xmlrpc php7.4-zip
اما در ویندوز اغلب توسعهدهندگان از WAMP استفاده میکنند. همچنین میتوانید آن را مستقیما با استفاده از WSL (Windows Subsystem For Linux) نصب کنید یا از راهنمای نصب ویندوز در مستندات رسمی PHP کمک بگیرید. WSL به این معنی است که کاربران ویندوز میتوانند راهنمای لینوکس را کم و بیش دنبال کنند. Laragon محیط توسعه دیگری برای ویندوز است.
اغلب کاربران مک هم از MAMP استفاده میکنند که مخصوص این سیستمعامل است.
من خودم با اوبونتو کار میکنم و PHP ، MySQL و Apache را مستقیما نصب کردهام.
در زیر چند راهنمای عالی برای ایجاد محیط توسعه محلی آورده شده:
ویندوز: https://netbeans.apache.org/kb/docs/php/configure-php-environment-windows.html
لینوکس: https://netbeans.apache.org/kb/docs/php/configure-php-environment-ubuntu.html
مک: https://netbeans.apache.org/kb/docs/php/configure-php-environment-mac-os.html
اجرا در سیستم
اکنون آماده هستیم تا دستورات را روی سیستم اجرا کنیم:
php -v
با این دستور اطلاعات نسخه PHP را در خط فرمان مشاهده میکنید.
PHP دارای حالت تعاملی خط فرمان است که به شما امکان میدهد دستورات را تایپ کرده و اجرا نمایید تا بتوانید موارد مختلف را امتحان کنید.
php -a
این دستور به شما پیغامی میدهد که در آن میتوانید خطوط کد PHP را وارد کنید و هنگامی که enter را میزنید، آن خطوط را اجرا کرده و خروجی را نشان میدهد. اگر دوست دارید از چنین چیزی استفاده کنید، من PsySH پیشرفتهتر را توصیه میکنم که همان کار را انجام میدهد و قابلیتهای بهتری هم دارد.
شما میتوانید یک فایل PHP را از خط فرمان مانند زیر اجرا کنید:
php index.php
PHP همچنین دارای یک وب سرور داخلی است که میتوانید به جای نصب Apache یا NGINX از آن استفاده کنید. این مورد برای آزمایش سریع خوب است. خود من هم بیشتر از این وب سرور داخلی و نصب محلی MySQL استفاده میکنم. Apache هم دارم اما اغلب به آن نیاز پیدا نمیکنم. وب سرور داخلی را در یک دایرکتوری که دارای فایلهای php. است مانند زیر اجرا کنید:
php -S localhost:8000
با این کار وب سرور به هاست و پورت داده شده گوش میدهد. سپس اگر /http://localhost:8000
را در مرورگر خود باز کنید، میتوانید برنامه PHP را که در آن دایرکتوری موجود است، اجرا نمایید.
توجه داشته باشید فایل index.php
نقطه ورود اکثر برنامههای PHP است. url بالا به طور پیش فرض index.php
را فراخوانی میکند.
مروری بر زبان PHP
PHP یک زبان تفسیرشده است به این معنی که برنامههای PHP هنگام اجرا از قبل کامپایل نمیشوند. هنگامی که یک مرورگر از منبع وب PHP درخواست میکند (معمولا یک فایل php.)، وب سرور تمام جزئیات درخواست (به عنوان مثال پارامترهای GET، مقادیر POST، کوکیها، هدرها و موارد دیگر) را در مترجم PHP که فایل PHP درخواستی را اجرا میکند، ارائه میدهد. اگر یک فایل PHP را روی سرور ویرایش کنید، این تغییر بلافاصله انجام میشود.
در بیشتر مواقع فایل index.php نقطه ورود یک برنامه PHP است و معمولا راه اندازی بوت را انجام میدهد و فریمورکی را برای رسیدگی به مقادیر درخواست اجرا میکند که اغلب در یک شیء درخواست بسته بندی میشوند. برنامههای قدیمیتر ممکن است از شیء درخواست استفاده نکنند، در این صورت مقادیر درخواست را میتوان در آرایههای سوپر گلوبال که از هر نقطه قابل دسترسی هستند، یافت (مانند $_GET
،$ _POST
،$ _COOKIE
و $ _SERVER
). فریمورکهای مدرن اینها را در یک شیء درخواست قرار میدهند و سپس مقادیر سوپر گلوبال را حذف میکنند تا از آسیبهای جانبی جلوگیری شود.
با اجرای برنامه PHP، خروجی به مرورگر فرستاده میشود. برخی از برنامهها خروجی را به صورت موقت با استفاده از دستور ()echo و دستورات مشابه ارسال میکنند که آن را به جریان خروجی استاندارد میفرستد. برنامههای مدرن تمام خروجیها را در یک شیء Response جمع آوری میکنند که در پایان اجرای برنامه به طور همزمان به مرورگر ارسال میشود.
PHP به طور پیش فرض stateless است. یعنی همه متغیرها، شیها و اتصالات ایجاد شده هنگام اجرای برنامه در یک درخواست، برای درخواست بعدی حفظ و نگهداری نمیشوند. PHP همچنین حافظه استفاده شده در طول درخواست را پاک کرده و هیچ دادهای را از یک درخواست به درخواست دیگر منتقل نمیکند. به علاوه چندین درخواست وارد شده به سرور را میتوان همزمان اجرا کرد.
سازوکارهایی وجود دارد که توسعهدهندگان PHP از آنها برای حفظ حافظه یا وضعیت بین درخواستها استفاده میکنند. متداولترین روش بهرهگیری از Sessionهاست. PHP یک مقدار شناسه را که معمولا در یک کوکی ذخیره میشود به مرورگر میفرستد. مرورگر هم این شناسه را همراه با همه درخواستهای بعدی ارسال میکند. در نهایت از این شناسه برای جستجوی مقادیر ذخیره شده در سیستم فایل یا پایگاه داده (یا دادههای ذخیره شده در Redis یا Memcached) که با آن شناسه مرتبط هستند، استفاده مینماید. به این ترتیب PHP میتواند بازدیدکننده یا کاربر را به خاطر بسپارد. با این حال، این مقادیر باید در هر درخواست از ذخیره ساز اطلاعات session خوانده شوند. همچنین آنها در یک سوپر گلوبال به نام $_SESSION
ذخیره میگردند که از داخل برنامه قابل دسترسی است. بسیاری از فریمورکها این سوپر گلوبال را در شیء Session خود قرار میدهند.
Typeها در PHP
PHP زبانی پویا و دارای یک سیستم type ضعیف است. به این صورت که متغیرها بر اساس نوع داده تعریف نمیشوند، در عوض نوع مقادیر با توجه به آنچه به آنها اختصاص داده شده در نظر گرفته میشود و اگر موردی جدید تعیین شود میتواند تغییر کند.
$something = 1; // Weakly typed as an integer.
$something = "Hello"; // Now it's a string.
به همین خاطر در برنامههای PHP، تایپ کستینگ (Type Casting) را خیلی زیاد میبینید:
$age = intval($age); // Make sure $age is an integer.
if( is_int($age) ){
// Do something.
}
بررسی typeها مانند مثال بالا در برنامههای PHP بسیار رایج است. از آنجا که همه مقادیری که در درخواست مرورگر به PHP منتقل میشوند رشته (string) هستند، برنامههای PHP اغلب این مقادیر را به انواع مورد انتظار تبدیل میکنند.
در سالهای اخیر، PHP ویژگیهای type دقیقی را اضافه کرده است. این بدان معناست که پارامترهای تابع و متد میتوانند به صراحت یک نوع برای پارامترهای ورودی و انواع بازگشتی تعیین کنند. اگر مقدار ورودی نوع مورد انتظار نباشد، یک استثنا در زمان اجرا پرتاب میشود. اگر دستور زیر را مشاهده کردید:
declare(strict_types=1);
پس typeهای موجود در آن strict تلقی میشوند که یعنی نوع فایلها ممکن است متفاوت باشد. این امر برنامههای بزرگ را قادر میسازد تا در لحظه به انواع strict تبدیل شوند.
برای مثال:
declare(strict_types=1);
function doSomething(int $id): string {
$id = '' . $id;
// This is allowed in PHP: $id is a string now.
}
doSomething('1'); // This would trigger a TypeError.
doSomething(1); // This would be fine
گذاشتن علامت ؟ در مقابل نوع مقادیر به این معنی است که میتواند null باشد.
سیستم نوع PHP ممکن است باعث سردرگمی یا خطا شود. همچنین کد باید بسیار واضح باشد که متغیر در هر زمان چه نوعی است و آیا میتواند تغییر کند یا نه. بسیاری از توسعهدهندگان توصیه میکنند در صورت امکان از انواع strict استفاده شود.
آرایههای PHP - یاد بگیرید که آنها را دوست داشته باشید
یکی از رایجترین انواع ساختار داده در PHP آرایهها هستند. توسعهدهندگان PHP از آرایهها برای هر کاری استفاده میکنند (حتی به جای اشیاء داده که ممکن است بهترین ایده نباشد). آرایهها در PHP بسیار انعطاف پذیرند، زیرا در واقع hashmaps هستند. این بدان معناست که کلید آرایه نباید متوالی یا حتی عددی باشد. پر کردن یک آرایه با اندیسهای صحیح گسسته به این معنی نیست که همه سلولهای آرایه بین آنها رزرو میشود:
$houses[0] = 'Blue';
$houses[55] = 'Red';
printf( array_key_exists(8, $houses) ); // 0 (false)
کلیدهای آرایه میتوانند رشتهای هم باشند:
$config['username'] = 'tonystark';
$config['password'] = 'ironman123';
// This can also be defined like so:
$config = ['username' => 'tonystark', 'password' => 'ironman123'];
همچنین میتوانید پیش از موعد یک مقدار را به عنوان یک آرایه خالی تعریف کنید، یا میتوانید مقادیر زیادی را تعیین کنید که کلیدهای متوالی و عددی با شروع از 0 به آنها داده شود:
$superheros = array(); // empty array.
$superheros = array('Superman', 'Batman', 'Black Widow', 'Ironman');
print_r($superheros); // [0] => Superman, [1] => Batman ...etc
به علاوه لازم نیست همه کلیدهای آرایه از یک نوع داده باشند. PHP مستندات زیادی در مورد آرایهها دارد و بسیاری از توابع داخلی را برای مرتب سازی و دستکاری آرایهها ارائه میدهد.
سینتکس PHP
سینتکس PHP کمی مشابه زبان C است. برخی از نکات برجسته را در زیر ذکر کردهایم:
- همه متغیرها با $ شروع میشوند. اما نام کلاسها، متدها و توابع اینگونه نیست.
- تمام عبارات به ; ختم میشوند.
- ساختارهای کنترلی درون {} قرار میگیرند.
- به فضاهای خالی و تورفتگیها حساس نیست.
- کد با <?php (گاهی به طور خلاصه فقط <?) شروع میشود و با ?> خاتمه مییابد. همچنین کدها را میتوان با HTML ترکیب کرد. اما برنامههای مدرن دیگر این کار را نمیکنند. اگر یک فایل با کد PHP به پایان برسد، از نوشتن تگ بسته (?>) میتوان صرف نظر کرد.
- رشتهها را میتوان در سینگل یا دبل کوتیشن قرار داد. کاراکترهای خاص (مانند \n برای رفتن به خط جدید) فقط در دبل کوتیشن تشخیص داده میشوند.
- بسیاری از پروژهها یک قاعده استاندارد کدنویسی برای حفظ ثبات در امور دارند. به عنوان مثال، نام کلاسها با حروف بزرگ شروع شود.
تجزیه و تحلیل کد
انجمن PHP ابزارهای بسیار خوبی ایجاد کرده که به شما امکان میدهد کیفیت و حتی صحت کد PHP خود را تجزیه و تحلیل کنید. این ابزارهای تجزیه و تحلیل استاتیک میتوانند برای کمک به حفظ پروژههای شما در یک سبک برنامه نویسی خاص مفید باشند. با اینکه ابزارهای زیادی برای تجزیه و تحلیل PHP وجود دارد، برخی از محبوبترین آنها عبارتند از:
- PHP Code Sniffer
- PHP Stan
- Psalm
- Phan
- PHP CPD (تشخیص دهنده کپی/پیست)
Composer و بارگیری خودکار
اگر نقطه ورود برنامه PHP شما فایل index.php باشد، هیچ فایل دیگری از کد منبع اجرا یا ارجاع داده نمیشود، مگر اینکه در فایل درخواست شده گنجانده شود. بنابراین اگر فایل "test.php" را اجرا کنید، فقط کد موجود در آن فایل در دسترس خواهد بود. در پروژههای قدیمی از include یا require برای وارد کردن کدهای دیگر استفاده میشد:
<?php
// File index.php
require('config.php'); // Execution will stop if this file is not found.
include('functions.php'); // If the file isn't found, execution continues anyway.
require_once('user.php'); // Ensure this isn't included multiple times.
$foo = 'bar';
ممکن است کدهای زیادی را در بالای یک فایل index.php مشاهده کنید که شامل تعریف کلاس، تابع و موارد مورد نیاز دیگر برنامه میشوند.
برنامههای PHP مدرن دیگر از چنین مواردی استفاده نمیکنند. چرا که به لطف بهرهگیری از کامپوزر (پکیج منجر PHP) میتوان فایلهای مورد نیاز را به صورت خودکار بارگیری کرد. این امر مانع از نوشتن کدی میشود که هرگز مورد استفاده قرار نمیگیرد. وقتی کامپوزر در پروژه پیکربندی میشود، یک دایرکتوری vendor/ ایجاد میکند که در آن بارگیری خودکار و پکیجهای نصب شده را قرار میدهد. اگر یک دایرکتوری vendor یا یک فایل composer.json را در روت پروژه خود مشاهده میکنید، به این ترتیب میتوانید تشخیص دهید که کامپوزر در حال استفاده است. اگر در بسیاری از برنامههای قدیمی از آن استفاده نمیشود، تعجب نکنید. چرا که PEAR یک منجر قدیمی است که برای نصب پکیجها در پروژههای PHP مورد استفاده قرار میگیرد.
در صورت استفاده از کامپوزر، کد زیر را در بالای هر فایل در برنامه مشاهده خواهید کرد:
require_once 'vendor/autoload.php';
این به ما اجازه میدهد وابستگیها را دریافت کنیم (مانند پروژههای متن باز موجود در Packagist) و آنها در دایرکتوری vendor نصب میشوند و فورا در دسترس پروژههای ما قرار میگیرند. ما میتوانیم آنها را به شماره ورژن خاصی وصل کنیم، وابستگیهای خود را به روز کنیم و برخی پکیجها را فقط برای محیط توسعه (مانند ابزارهای تست و تجزیه و تحلیل استاتیک) تعریف نماییم.
درک و یادگیری کامپوزر برای توسعه PHP مدرن بسیار مهم است. توضیحات تکمیلی و نحوه نصب آن را میتوانید در این مقاله دنبال کنید.
منابع PHP و چشم انداز آینده
PHP یک زبان نسبتا قدیمی است و آموزشها، پاسخهای StackOverflow و پستهای منتشر شده در مورد آن که ممکن است به صورت آنلاین در دسترس باشند، بسیار قدیمی هستند و شامل بسیاری از اشکالات امنیتیاند. بنابراین توصیه میکنم از منابع یا کدهایی که بیش از 3 سال پیش منتشر شدهاند، استفاده نکنید.
نسخههای PHP دارای یک چرخه عمر تعریف شده هستند. پس مطمئن شوید که از نسخه پشتیبانی شده استفاده میکنید.
PHP دارای بهترین مستندات رسمی از جمله نمونه کدها و نظرات کاربران است که در آدرس /https://www.php.net یافت میشوند.
همچنین یکی از بهترین منابع برای یادگیری PHP، این دوره مفید و رایگان در وب سایت راکت است که میتوانید از آن استفاده کنید.
محبوبترین ویرایشگرهای این زبان، VSCode (آنچه من استفاده میکنم) و SublimeText هستند. اگر هم به یک IDE کامل نیاز دارید، بهترین گزینه PHPStorm است، اما یک محصول تجاری است که باید لایسنس آن را خریداری کنید.
جمعبندی
امروزه PHP یک زبان برنامهنویسی مدرن، منعطف و محبوب به حساب میآید. جامعه آن بسیار بزرگ است و منابع زیاد و متنوعی برای آن وجود دارد. من به شخصه از کار با PHP لذت میبرم. این زبان به طور مداوم به روزرسانیهای اصلی و نسخههای جدید را دریافت میکند که روز به روز هم بهتر میشود. آخرین نسخهای که منتشر شده PHP 8 است که نکات و موارد جدید مربوط به آن را میتوانید در اینجا دنبال کنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید