در بین توسعه دهندگان وب و به طور کلی برنامهنویسان؛ این مسئله از کسی پوشیده نیست که PHP معتبرترین و مشهورترین نیست. با وجود این اما هنوز یکی از پر کاربردترین زبانها برای ساخت وباپلیکیشنهاست؛ باگذشت سالها، PHP توانسته به داشتن کدبیسهای کثیف، توسعه دهندگان بیتجربه، نا امن بودن کد، core library های متناقض یا ( هسته متناقض کتابخانه) و … شهرت پیدا کند.
در حالی که بسیاری از استدلالها علیه PHP بوده و هنوز هم وجود دارد، اما یک جنبه روشن و مثبت نیز هست: شما میتوانید برنامههای تمیز با قابلیت نگهداری، سریع و قابل اعتماد در PHP بنویسید.
در این مقاله از راکت به جنبه مثبت توسعه با PHP نگاهی میاندازیم. میخواهم شما بدانید که دوران PHP 5 به پایان رسیده است؛ و اگر بخواهید میتوانید یک کد PHP مدرن، تمیز بنویسید و نزدیک به ۱۰ سال گذشتهی کثیف را پشت سر بگذارید.
بنابراین بیایید ببینیم طی چندسال گذشته چه تغییراتی در این زبان به وجود آمده و چقدر بالغ شده. میخواهم از شما بخواهم فقط برای چند دقیقه هرگونه تعصب را کنار بگذارید و احتمالاً از آنچه که امروز PHP هست، تعجب خواهید کرد.
خب آمادهی غرق شدن شوید :)))
خلاصهای از تاریخچه
قبل از اینکه بخواهیم به جزئیات بپرادزیم، اجازه دهید به چگونگی توسعه PHP در این روزها را باهم مرور کنیم. اکنون در نسخه ۷.۴ هستیم و PHP 8 نسخه بعدی آن در اواخر سال ۲۰۲۰ خواهد بود.
از اواخر ۵ سال گذشته، تیم اصلی سعی میکند چرخه آزاد شدن یا release را به صورت سالانه حفظ کند و چهارسال گذشته هم موفق به انجام این کار شده است.
به طور کلی، هر نسخه جدید به مدت دو سال به طور فعال پشتیبانی میشود و یک سال دیگر (فقط رفع مشکلات امنیتی) میشود. هدف این است که به توسعهدهندگان انگیزه دهید که تا حد ممکن بروز باشند: برای مثال بروزرسانیهای کوچک هر ساله آسانتر از پرش بین PHP ۵.۴ به ۷.۰ است.
سر انجام ، php ۵.۶ آخرین نسخه ۵.* بود و نسخه بعدی آن ۷.۰ بود. اگر میخواهید بدانید که درمورد php۶ چه اتفاقی افتاده است، میتوانید این قسمت از پادکست میزگرد php را گوش دهید.(پادکست به زبان انگلیسی است)
توسعه php این روزها توسط گروهی از دواطلبان انجام میشود، که حقوق برخی از آنها توسط کارفرمایشان پرداخت میشود تا به صورت تمام وقت روی هسته آن کار کنند. بیشتر بحثها درباره نحوه تکامل زبان، در یک میل لیست اتفاق میفتد.
با تمام این کارها، بیایید برخی از تصورات غلط درباره php مدرن را رد کنیم.
نوع سیستم پی اچ پی (PHP's type system)
php به عنوان زبانی ضعیف و پویا (dynamically )، که در آن زمان فواید خودش را داشت، شروع شد. از زمان شروع استفاده از php برای پروژههای بزرگ، کمبودهای type system آن آشکار شد و نیاز به پشتیبانی از نوع قوی تری به وجود آمد.
امروزه php یک زبان نسبتاً منحصر به فرد است: هنوز هم به شما اجازه میدهد که کدی کاملاً پویا و از نوع ضعیف بنویسید، اما همچنین دارای یک سیستم بسیار قویتر، از نوع opt-in است. همراه با آنالیز استاتیک، ابزارهایی مثل psalm، phan و PHPStan، میتوانید کدهای ایمن، قوی و آنالیز استاتیک کد را بنویسید.
به عنوان مثال، به این تکه کد نگاه کنید که کاملاً با استفاده از سیستم نوع مدرن است :
<?php
declare(strict_types=1);
final class Foo
{
public int $intProperty = 2;
public ?string $nullableString = null;
private Bar $bar;
public function __construct(Bar $bar) {
$this->bar = $bar;
}
public function withInt(int $value): self
{
$clone = clone $this;
$clone->intProperty = $value;
return $clone;
}
public function unionTypes(int|float $input): void
{
// Union types will be added in PHP 8
}
}
حقیقت باید گفته شود، که یکی از ویژگیهای مهم که هنوز در type system پی اچ پی وجود ندارد: generic ها هستند. امید داریم که آنها اضافه شوند اما هنوز چیز مشخصی وجود ندارد. در صورت ایجاد typed array ها، برای بدست آوردن پشتیبانی مناسب IDE باید به docblock ها متکی باشید.
شاید درمورد docblock ها چیزی ندانید شاید هم اطالاعات کاملی داشته باشید؛ در هر صورت، DocBlock یک کامنت چند خطی با استایل زبان C است که برای مستندسازی یک بلاک کد استفاده میشود، در واقع DocBlock همان کامنت مربوط به هر عنصر است که با قاعده خاصی نوشته شده است.
/** @var int[] */
public array $arrayOfInts = [];
گرچه typed array ها یک مورد استفاده مشترک برای generic، قابل حل با docblock ها هستند، اما قابلیتهای بسیار بیشتری نیز وجود دارد که ما آنها را ازدست میدهیم چرا که هنوز آنها هنوز در این زبان نیستند .
سینتکس php
php ۷ از نظر اینکه این زبان را بالغتر و پختهتر کرده، کارهای بسیار خوبی انجام داده است. برای نشان دادن این ، یک لیست نه تقریباً جامع از چیزهای جدید در php تهیه کردهام.
Array destructuring :
[$a, $b] = $array;
اپراتور null coalescing :
$value = $object->property ?? 'fallback if null';
$value = $array['foo'] ?? "fallback if key doesn't exists";
اپراتور null coalescing assignment :
public function get(string $input): string
{
return $this->cache[$input] ??= $this->sanitize($input);
}
Array spreading:
$a = [/* … */];
$b = [/* … */];
$mergedArray = [...$a, ...$b];
فانکشنهای Variadic :
public function get(Foo ...$foos): void
{
foreach($foos as $foo) {
// …
}
}
Argument unpacking :
$this->get(...$arrayOfFoo);
public int $intProperty;
Arrow functions ها، که short closures هم نامیده میشود :
$ids = array_map(fn(Post $post): int => $post->id, $posts);
Generators :
function make(array $input): Generator
{
foreach ($input as $item) {
yield $this->doSomethingWith($item);
}
}
و موارد خیلی بیشتر. امیدوارم که از این لیست کاملاً مشخص باشد که php هنوز در حال تغییر و تحول است. و شما میتوانید مطمئن باشید که چیزهای خوب زیادی در آینده به وجود خواهد آمد.
عملکرد php
در روزگار ۵.*، عملکرد php در بهترین حالت خودش بود. اگرچه با ۷.۰، بخشهای عمدهای از هسته php از پایه بازنویسی شدند، که این منجر به افزایش دو یا سه برابری عملکرد میشود. علاوه بر این هر نسخه ۷.* تأثیر مثبتی بر عملکرد دارد.
کلمات نمیتوانند کافی و گویای مطلب باشند. بیایید به معیارها نگاه کنیم. خوشبختانه افراد دیگر وقت زیادی را در معیار عملکرد صرف کردهاند. فهمیدم که kinsta یک لیست به روز شدهی خوب دارد.
آخرین ویژگی مرتبط با عملکرد، preloading نام دارد؛ که در اصل به شما این امکان را میدهد تا قسمتهای کامپایل شدهی کد php خود را در حافظه ذخیره کنید. در اینجا میتوانید برخی از معیارها را بررسی کنید.
با ورود php۸، ما یک کامپایلر JIT را نیز در اختیار داریم که نویدبخش بهبود عملکرد به صورتی جالب است و به PHP اجازه میدهیم علاوه بر توسعه وب، وارد مناطق جدید شود.
فریمورکها و اکوسیستم
به سمت آنچه توسط جامعه PHP انجام میشود حرکت کنید. بیایید واضحتر بگوییم:
PHP فقط وردپرس نیست، اتفاقاً برعکس!
به طور کلی دو فریمورک بزرگ برای وباپلیکیشن وجود داردو البته چند مورد کوچکتر : سیمفونی و لاراول. مطمئناً Laminas ، Yii، Cake ، Code Igniter و … نیز وجو دارند- اما اگر میخواهید بدانید توسعه مدرن php چگونه است، با یکی از دو مورد اول بهتر میتوانید کار کنید.
هر دو فریمورک دارای اکوسیستم بزرگی از پکیجها و محصولات هستند؛ اعم از پنلهای مدیریتی و CRMها تا پکیجهای مستقل، CI تا profilers و خدمات بیشماری مانند web sockets server ها ، payment integration ها و queuing manager ها. صادقانه بگوییم، لیست زیادی وجود دارد.
این فریمورکها برای توسعه فعلی در نظر گرفته شدهاند. اگر در عوض به یک مدیریت محتوای خالص نیاز دارید، پلتفرمهایی مانند وردپرس، CraftCMS و Statamic بیشتر و بیشتر به بهبود کار شما کمک میکند.
یکی از راههای سنجش وضعیت فعلی اکوسیستم PHP، نگاهی به Packagist، ریپازیتوری پکیج اصلی PHP است. این به صورت نمایی رشد داشته؛با مثبت ۲۵ میلیون دانلود در روز، منصفانه است که بگوییم اکوسیستم PHP به کوچکی سابق نیست.
به این نمودار نگاهی بیندازید و مقدار بستهها و نسخهها را باگذشت زمان ببینید. همچنین این را میتوان در وب سایت Packagist نیز یافت.
علاوه بر این فریمورکهای کاربردی و CMS ها، ما همچنین شاهد ظهور فریمورکهای asynchronous در سال گذشته بودهایم. اینها فریمورکها و سرورهایی هستند که به زبان php یا سایر زبانها نوشته شدهاند و به کاربران امکان میدهند که کد php را واقعاً به صورت asynchronous یا غیر همزمان اجرا کنند. برخی از بازیکنان اصلی این حوزه Swoole ، Amp و ReactPHP هستند.
از آنجا که ما وارد دنیای async شدهایم، چیزهایی مانند socket ها و اپلیکیشنها با تعداد زیادی IO درواقع در دنیای php مرتبط هستند.
همچنین در میل لیستهای داخلی صحبتهایی شده است تا بتوانند libuv را به هسته اضافه کنند. برای کسانی که از libuv بی اطلاع هستند: همانند کتابخانه نود جی اس است که اجازه میدهد تا همهی asynchronicity را استفاده کند. چه کسی میداند؟ php۸ ممکن است نسخهای باشد که آن را به هسته اضافه کند.
و در آخر
امیدوارم که توانسته باشم به شما نشان دهم که php طی سالهای گذشته به طور چشمگیری تکامل یافته است؛ و شما کاملاً قادر به نوشتن کدی تمیز با قابلیت نگهداری هستید.
بنابراین درحالی که این زبان قطعاً اشکلاتی دارد و میراثی ۲۰ ساله برای حمل کردن دارد؛ اما با اطمینان میتوان بگوییم که من از کار کردن با آن لذت میبرم.
با تجربهای که دارم، میتوانم یک نرمافزار قابل اعتماد، پایدار و با کیفیت ایجاد کنم. در حالی که هنوز هم بسیاری از موارد را میتوان به صورت اشتباه در php انجام داد، ولی اگر به صورت عاقلانه و صحیح استفاده شود، میتواند انتخاب خوبی برای توسعه وب باشد.
موافق نیستید؟ بگذارید ما هم بدانیم چرا! از طریق نظرات دلیل خودتان را با ما به اشتراک بگذارید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید