این چیزی است که PHP را مدرن به نظر می‌رساند

آفلاین
user-avatar
عرفان حشمتی
28 مرداد 1399, خواندن در 18 دقیقه

عنوان واقعا مدعی و پر جلوه است، اینطور نیست؟ چرا همینطور است. با اینکه ما سال‌ها با پی اچ پی کار می‌کنیم، اما چگونه می‌توانیم بیان کنیم بهترین روش‌ها و ابزارهای شغلی چیست؟ قبلا نمی‌توانستیم، اما اکنون می‌خواهیم این کار را انجام دهیم.

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

ابزارهای جدید، کتابخانه‌ها، فریمورک‌ها و مقالات ایجاد می‌شوند، الگوهایی تعریف می‌شود که کد را زیباتر و آسان‌تر می‌کند. افراد زیادی در حال فکر کردن در مورد راه‌حل‌هایی هستند که کار و زندگی شما به عنوان یک توسعه دهنده را بارورتر، تمیزتر و سرگرم کننده تر جلوه دهند.

ما متقاضی اولیه روش‌های جدید نیستیم. در واقع، ما فقط وقتی مطمئن هستیم که جامعه‌ای در پشت آن وجود دارد. همچنین یک ابزار جدید را اتخاذ کرده‌ایم و واقعا فکر می‌کنیم این کار باعث بهبود کارمان خواهد شد. کاری که همیشه انجام می‌دهیم این است که کدهای خود را با استفاده از بهترین روش‌ها بنویسیم. به همین دلیل زمان آن فرا رسیده تا شروع به استفاده از ابزارهایی مانند Composer و PHPUnit کنیم.

ابتدا PSR آمد و به دنبال آن Composer، PHPUnit ، Travis-ci و چندین کتابخانه و ابزار شگفت‌انگیز دیگر. ما حتی الان از این IDE استفاده می‌کنیم (Vim FTW، اما PHPStorm با ادغام XDebug یک جریان کاری عاقلانه است)!

مفهوم مدرن به چه معنی است؟

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

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

به طور روزانه چندین کار را با پی اچ پی انجام می‌دهیم، اما نمی‌توان چشم خود را به تغییراتی که در زبان، اجتماع و اکوسیستم رخ می‌دهد، بست. یک راه طولانی در پیش است، اما همه چیز در وادی پی اچ پی ممکن می‌شود.

من فقط به عنوان یک پروژه خانگی، ایجاد یک SDK را برای یک API داخلی در شرکتی که برای آن کار می‌کنم، شروع کردم و تصمیم گرفتم بهترین روش‌ها را دنبال کنم. بیشتر آن‌ها را قبلا انجام می‌دادم، اما در نحوه انجام برخی کارها تغییرات اندکی را اعمال کردم. آن تغییرات و آنچه در سال گذشته آموختم موضوع این مقاله است و آنچه من آن را پی اچ پی مدرن می‌نامم.

بیایید با جریان کار آشنا شویم

همانطور که گفتم، من به تازگی کار با این IDE را شروع کردم، اما در نگاه اول عشق بود. PHPStorm یک نرم‌افزار بسیار عالی است. این اولین و تنها IDE من است و حتی لازم نیست که سعی کنم هیچ چیز دیگری را امتحان کنم.

ادغام با XDebug بی‌نقص است، شفافیت فضای نام پی اچ پی، ادغام Composer، ادغام Git، تکمیل خودکار، تولیدکننده کد، جایگذاری کد و همینطور می‌توانم ادامه دهم.

من نمی‌گویم که شما حتما باید از IDE استفاده کنید، این قضیه کاملا شخصی است. شما باید از هر آنچه که متناسب با نیازهای شماست بهره ببرید.Vim ، Atom، Emacs، Bracket، NetBeans، PHPStorm، Eclipse و غیره. دو نکته مهم در اینجا بهره‌وری و ارگونومی است. ویرایشگر متن (IDE) شما باید بتواند نیازهایتان را برطرف سازد.

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

XDebug همه چیز مورد نیاز شما را دارد. اگر هنوز با آن کار نکرده‌اید، پس وقت آن است که دیباگ کردن کدهای خود را با آن شروع کنید.

ابزار دیگری که می‌خواهم به شما معرفی کنم GitHub است. مقاله دیگری را می‌توان در مورد مزایای Git و GitHub نوشت و اینکه چرا باید کد خود را تحت یک سیستم نسخه نویسی شروع کنید. اما می‌خواهم دلیل دیگری را برایتان توضیح دهم.

چندین ابزار وجود دارد که با GitHub ادغام شده‌اند و شما باید از آن‌ها استفاده کنید. این ابزارها می‌توانند معیارها را تولید کنند، آزمایش کنند، کارهایی را برای شما طی یک فرایند انجام دهند و انواع وظایف را برایتان به عهده بگیرند. ادغام دلیل خوبی برای شروع استفاده از GitHub است، سایر موارد بماند برای بعد.

مدیریت وابستگی

نکته دیگر در این اکوسیستم مدرن پی اچ پی، مدیریت وابستگی است و Composer ابزاری برای این کار است.

Composer حدودا 5 سال است که به وجود آمده و از چند سال پیش به خوبی نزد توسعه دهندگان پذیرفته شد. شاید به این دلیل که من تازه وارد نیستم یا شاید توسعه دهندگان پی اچ پی تمایلی به تغییر ندارند.

این ابزار بسته‌ای را برای طراحان فرانت‌اند فراهم می‌کند که یک بسته پی اچ پی متشکل از کتابخانه‌ها، پروژه‌ها و ابزارهایی است که کد منبع آن در Github (یا مکان‌های دیگری مانند BitBucket) ذخیره می‌شود.

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

$ composer require package_vendor/package_name

اگر کاربرد یک بسته را نمی‌دانید، می‌توانید یک آن را جستجو کنید تا یک مورد مناسب پیدا کرده و نصب کنید.

$ composer search package_name

Composer این کار را انجام می‌دهد و وابستگی‌ها را مدیریت می‌کند و ابزار بسیار کارآمدی خواهد بود. سعی کنید برای نصب آن و خواندن راهنمایش وقت کافی بگذارید.

رابط خط فرمان مناسب

من واقعا دوست دارم با استفاده از رابط‌های CLI، ایده‌هایم را به سرعت امتحان کنم. برای من، یکی از بزرگترین ابزارهای REPL ، IPython است. این ابزار به شما کمک می‌کند تا کد خود را به طور کامل تکمیل کنید و به شما این امکان را می‌دهد توابع را به راحتی تعریف کنید و دسترسی به اسناد و چندین ویژگی شگفت‌انگیز دیگر را آسان می‌کند. عیب آن برای ما، این است که ابزاری برای پایتون است، نه پی اچ پی.

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

$ php -aInteractive mode enabled
php >

در این مرحله، شما در حالت تعاملی هستید و می‌توانید آزمایش چیزی را شروع کنید. این ابزار درست کار می‌کند، اما بسیار ناخواسته است. من چندین بار آن را امتحان کردم و از آنجا که می‌دانستم IPython قادر به انجام چه کاری است، دیگر نتوانستم از آن استفاده کنم.

برای راحتی کار ما، یک CLI (رابط خط فرمان) جدید و جالب در بلوک وجود دارد و نام آن Psysh است. Psysh ابزاری شگفت‌انگیز و مملو از ویژگی‌های جالب است. همچنین می‌تواند در سطح جهانی یا در هر پروژه‌ای با استفاده از Composer مورد استفاده قرار گیرد.

بهترین ویژگی Psysh برای من مستندات درون خطی است. دسترسی به سند برای توابع پی اچ پی بدون رفتن به Php.net بسیار عالی است. نکته منفی این است که شما باید تنظیماتی را انجام دهید قبل از اینکه از آن استفاده کنید.

پس از نصب آن، دستورات زیر را تایپ کنید. (من در اینجا از دبیان استفاده می‌کنم و ممکن است برای همه کار نکند)

$ apt-get install php7.1-sqlite3$ mkdir /usr/local/share/psysh$ wget http://psysh.org/manual/en/php_manual.sqlite -o /usr/local/share/psysh/php_manual.sqlite

دستور اول اجباری نیست و اگر Sqlite را از قبل نصب کرده باشید می‌توانید از این مرحله رد شوید. دستور دوم دایرکتوری ایجاد می‌کند تا مستندات و بارگیری‌های خط سوم را ذخیره کرده و Doc را در فهرست قبلی ایجاد کند. به یاد داشته باشید، تمام این دستورات باید به صورت root اجرا شوند.

اکنون تصویر زیر را می‌بینید:

به سمت Psysh بروید و درباره این ابزار عالی اطلاعات بیشتری کسب کنید.

باید تست را شروع کنید

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

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

اولین ابزاری که به شما معرفی شد PHPUnit بود. همانطور که در سایت رسمی اعلام شده است:

" PHPUnit یک فریمورک تست محور برای برنامه نویسان پی اچ پی است. این نمونه‌ای از معماری xUnit برای فریمورک‌های تست است."

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

از آنجا که من در مورد تست‌ها، با افراد زیادی صحبت کردم در نتیجه یک ابزار عالی دیگر را کشف کردم که کار شما را در آن تست‌های یونیتی که قرار داده‌اید، تکمیل می‌کند. نام آن Behat است که یک فریمورک BDD برای پی اچ پی است.

BDD (توسعه محور رفتار) فرایندی است که از TDD (توسعه محور تست و آزمایش) ناشی می‌شود. این کلمات اختصاری مهم نیستند، مهم این است که شما می‌توانید تست‌های خود را با استفاده از یک زبان طبیعی‌تر انجام دهید، زبانی که افراد غیر فنی هم می‌توانند آن را درک کنند.

این زبان Gherkin نام دارد و برای توصیف رفتار مورد آزمایش قرار می‌گیرد. شرح تست با استفاده از گرکین، به این شکل است:

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

فرایند کار با Behat بسیار روان است. پس از پیکربندی، شروع به نوشتن تمام سناریوهای ممکن برای تست یک ویژگی می‌کنید. اولین باری که Behat را اجرا می‌کنید، تمام قالب‌های متنی را که باید به کلاس متن پی اچ پی اضافه کنید در اختیارتان می‌گذارد تا بتوانید هر مرحله را در یک سناریو پیاده سازی کنید. پس از آن، شما شروع به نوشتن کد واقعی برای هر مرحله می‌کنید و تکرار این چرخه را ادامه می‌دهید.

  • کد پی اچ پی را برای یک مرحله پیاده سازی کنید.
  • تست‌ها را اجرا کنید.
  • اگر همه چیز خوب پیش رفت، برای مرحله دیگر کد پی اچ پی بنویسید.
  • اگر مشکلی وجود دارد، آن را برطرف کنید.

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

مجتمع سازی پیوسته

مجتمع سازی پیوسته (CI) فرایندی است که راهی را برای انجام کاری نشان می‌دهد و این برای ما مهندسین نرم‌افزار اهمیت دارد که چگونه برنامه‌ای را بسازیم.

به زبان ساده، عملی است که تکه‌های کوچکی از کد را به طور مداوم (شاید چند بار در روز) در پایگاه کد خود وارد کنید. کد تست شده است و چیزی را خراب نمی‌کند. CI به شما کمک می‌کند تا ساختمان، آزمایش و استقرار برنامه‌های خود را به صورت خودکار انجام دهید.

با چند کلیک می‌توانید پروژه GitHub خود را با Travis CI ادغام کنید و آن تست‌هایی را که با PHPUnit و Behat ایجاد کرده‌اید، اجرا می‌کند. همچنین به شما می‌گوید آخرین ویژگی‌ای که اجرا کرده‌اید آماده است یا خیر. علاوه بر این، می‌توانید از Travis CI استفاده کنید تا کدهای خود را در مرحله تولید و دسته‌بندی قرار دهید.

داشتن یک خط لوله کاری خوب و با یک فرایند تعریف شده، بسیار عالی است و Travis CI می‌تواند در این کار به شما کمک کند. این شروع خوب را دنبال کنید و ببینید که چقدر جالب است که در مورد روند توسعه نرم‌افزار فکر کنید، نه فقط به خود کد.

به PSR-1 و PSR-2 پایبند باشید

اگر نمی‌دانید PSR چیست، در اینجا خواهید فهمید. در واقع، PSR مخفف توصیه‌های استاندارد پی اچ پی است و توسط PHP-FIG (گروه PHP Framework Interop، کنسرسیومی که توسط اعضای بزرگترین پروژه‌های پی اچ پی، فریمورک‌ها و CMS ها تشکیل شده است) پیشنهاد می‌شود که به فکر آینده زبان، اکوسیستم و بحث و گفتگو در مورد آن هستند. این‌ها استانداردهایی هستند که باید رعایت شود.

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

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

تا پایان این مقاله، نُه PSR پذیرفته شده وجود دارد که راه‌حل‌های مشترک را برای مشکلات مشترک پیشنهاد می‌کنند. اما اگر چیزی در مورد این استانداردها نمی‌دانید، از PSR-1 و PSR-2 شروع کنید.

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

PHP CodeSniffer ابزاری است که می‌توانید در Packagist پیدا کنید که می‌توانید با Composer آن را نصب کنید. فکر نمی‌کنم نام انبار بهترین انتخاب باشد، زیرا دو ابزار مختلف phpcs و phpcbf را شامل می‌شود.

Phpcs رمزگشایی کد است. به دنبال بخش‌هایی که مطابق استاندارد کد گذاری پیکربندی نشده‌اند، کل کد شما را اسکن می‌کند.

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

حال، چگونه چیزهای اشتباه را تغییر دهیم؟ می‌توانید هر فایل را باز کنید، کد را تغییر دهید، دوباره phpcs ها را اجرا کنید، خطاهایی را که نشان داده نمی‌شود، ببینید و روند را دوباره تکرار کنید. این فرایند خسته کننده خواهد بود.

برای حل این مشکل، PHP CodeSniffer با ابزار دیگری به نام phpcbf یا PHP Code Beautifier همراه شد. شما phpcbf را اجرا می‌کنید، به دنبال همان مجموعه قوانین، همه چیز را برای شما برطرف می‌کند یا سعی می‌کند بهترین کار را بدون شکستن کد انجام دهد.

سعی کنید قبل از اعمال هرگونه تغییر در کد خود، عادت به کار بردن phpcs و phpcbf را فرا بگیرید. این امر اطمینان حاصل می‌کند که کلیه کدهای شما مطابق با استانداردها است و اگر کسی پروژه شما را دوست داشته باشد و بخواهد در آن مشارکت کند، دیگر در خواندن آن مشکل نخواهد داشت.

فریمورک‌ها

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

اگر به سرویس دهنده HTTP احتیاج دارید، از Guzzle استفاده کنید. اگر شما نیاز به یک موتور قالب دارید، از Twig استفاده کنید. اگر به روتر احتیاج دارید ، یک جزء مناسب پیدا کنید که متناسب با نیاز شما باشد و از آن استفاده کنید. این قطعات را به هم بچسبانید و برنامه خود را ایجاد کنید.

Symfony در حال انجام کار بسیار خوبی در قبال این مفهوم است. شما می‌توانید از کل فریمورک برای یک پروژه استفاده کنید، یا می‌توانید هر آنچه را که می‌خواهید بردارید و از آن استفاده کنید. به همین سادگی.

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

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

به هر حال، این برای کسانی است که شروع به برنامه نویسی می‌کنند. من واقعا فکر می‌کنم قبل از اتخاذ یک فریمورک و کار با آن، شما باید سعی کنید خودتان برنامه را بسازید. این درک شما را از کل ساز و کار بیشتر می‌کند.

مجموعه ابزارهای مدرن پی اچ پی

بیایید این مقاله را با لیستی از لینک‌ها به پایان برسانیم. از نظر من این مؤلفه‌ها، ابزارها و كتابخانه‌ها بخش عظیمی از آنچه در پی اچ پی مدرن ارائه می‌شود را دارند که عبارتند از:

  • Slim: یک میکروفریمورک خوب و جالب
  • Symfony: فریمورکی بزرگ‌تر با اجزای عالی و قابل استفاده مجدد
  • Guzzle: یک سرویس گیرنده HTTP ساده و آسان برای استفاده
  • PHPUnit: فریمورکی برای تست
  • Behat: فریمورکی برای توسعه رفتار محور
  • PHPCS / CBF: اسکن کننده کد و زیباسازی کد
  • Faker: تولید کننده داده‌های جعلی
  • Psysh: یک کنسول توسعه دهنده زمان اجرا (CLI) پر از ویژگی های شگفت انگیز
  • Composer: مدیریت وابستگی و سایر ویژگی‌های مفید
  • Packagist: انبار بسته
  • Twig: موتور قالب

من می‌دانم که این عنوان واقعا پر ادعا بود. آنچه که می‌خواستم اینجا نشان دهم این است که پی اچ پی در حال تحول است و اکوسیستم آن با همان سرعت (شاید سریع تر) در حال تحول است.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
عرفان حشمتی @heshmati74
مهندس معماری سیستم های کامپیوتری، طراح و توسعه دهنده وب سایت
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو