انـقـلاب PHP

اگر چه در گذشته مشکلات اساسی و مهمی در PHP وجود داشت، اما تغییرات جدید، استفاده از آن را برای کاربران لذت بخش کرده است.

اگر چند سال پیش می خواستیم یک کلمه درباره ی PHP بگوییم، آن کلمه چیزی به غیراز «نفرت» نبود. تردیدی وجود ندارد که در گذشته، کار کردن با PHP و مشکلات آن، برای تمام کاربران، وحشتناک و فاجعه آمیز بود. برای این که بدانیم کاربران PHP با چه مشکلاتی روبرو بوده اند، کافی است نگاهی به انجمن های آنلاین مربوط به PHP در اینترنت داشته باشیم. البته امروزه توسعه دهندگان PHP توانسته اند شرایط بهتری را برای کاربران به وجود بیاورند. بهتر است بدانید که بیشتر انتقاد ها (که با تند ترین لحن ممکن بیان شده اند)، مربوط به زمانی است که کاربران از PHP 4 استفاده می کردند. اگر پیام های جدیدی که در انجمن های آنلاین PHP گذاشته می شوند را ببینیم، متوجه خواهیم شد که انتقاد ها کم تر و لحن کاربران نیز بهتر از گذشته شده است.
تنها دلیل این موضوع، بهتر شدن PHP است. در حقیقت می توانیم بگوییم که یک انقلاب (رِنُسانس) در PHP اتفاق افتاده است. توجه و تاکید زیاد بر کامل بودن، جدید بودن و انجام بررسی های دقیق، موجب شده تا Laravel (به نشانی laravel.com)، Composer (به نشانی getcomposer.org) و PHP 5.5 بتوانند یک توسعه ی جدید و بی نظیر را در اختیار کاربران قرار دهند. در این مقاله به بررسی ویژگی های جدید و بی نظیر PHP می پردزایم.

باورتان می شود؟
«حقیقت دارد؟ PHP بهتر شده است؟ باورم نمی شود!» بهتر است بدانید که PHP نسبت به گذشته تغییر کرده و بهتر شده است. شاید برای بسیاری از کسانی که از PHP استفاده کرده اند، باور کردنی نباشد اما تغییرات و بهبود های انجام شده در PHP، قابل توجه هستند. در حقیقت PHP دچار تغییرات اساسی و کُلی شده است. درست است که از جنبه های مختلف، این تغییرات و بهبود ها، دیر تر از زمان مناسب اتفاق افتاده اند اما بدون تردید، PHP جدید، از نسخه ی ۴٫۰ قابل قبول تر بوده و عملکرد بهتری دارد.
به نظر می رسد که افراد بسیاری، شیوه ی نا متعارف و نا درست PHP را پذیرفته اند و این زبان را همان طور که وجود داشته و دارد، مورد استفاده قرار می دهند. اگر کمی فکر کنیم، متوجه خواهیم شد که این موضوع، چندان هم غیر عادی نیست. یک توسعه دهنده، در ابتدای فعالیت های حرفه ای و تخصصی خود، کارش را با PHP آغاز می کند. اگر اشکال ها، کمبود ها و نقص های این زبان را در کنار کمبود های علمی و فنی یک توسعه دهنده ی تازه کار قرار دهیم، متوجه تعصبی که در آینده برای چنین توسعه دهنده ای به وجود می آید، خواهیم شد. اگر شما نیز یکی از این توسعه دهندگان هستید، بهتر است ساختار قدیمی PHP را فراموش کرده و آماده ی روبرو شدن با تغییرات گسترده ی آن باشید. برای آشنایی با PHP جدید، تنها کافی است در یکی از همایش های عمومی آن شرکت نموده یا نگاهی به framework های جدید، مانند Laravel داشته باشید تا متوجه شوید که دنیای PHP نسبت به گذشته (و زمانی که شما یک تازه کار بودید) تغییرات گسترده ای داشته است. بهتر است بدانید که دیگر خبری از پس زمینه های بد و نا مناسب و همچنین فایل های عملکردی پنج هزار خطی نخواهد بود.
اگر می توانید باور کنید، بسیاری از توسعه دهندگان اعتقاد دارند که کار کردن با PHP جدید، به جای این که سخت و دشوار باشد، آسان و لذت بخش است. در ادامه نگاهی به جدید ترین نسخه ی این زبان و برخی از ابزار بی نظیر آن خواهیم داشت.

PHP 5.5
آیا پیاده سازی برنامه نویسی موضوعی (مقصود گرای) ناشیانه ی PHP 4 و اشکال هایی که در آن وجود داشت را به خاطر می آورید؟ در آن روز ها، توسعه دهندگان مجبور بودند تا visual queue ها را، درست مانند underscore ها، چندین بار مرتب کرده تا روش private را مشخص نمایند چرا که در آن زمان، زبان PHP از آن ها پشتیبانی نمی کرده است.
اما امروزه، بر خلاف گذشته، PHP تمام آن چیزی که از یک زبان جدید و به روز انتظار دارید را در اختیارتان قرار می دهد. در کنار یک نمونه ی موضوعی توسعه یافته، مواردی مانند generator ها، closure ها، trait ها، static binding، یک سِرور داخلی وِب و چند ویژگی دیگر نیز در نسخه ی جدید، در اختیار کاربران قرار داده شده است.
البته این بهبود ها، موارد بسیار ساده ای برای جذاب تر کردن این زبان به حساب می آیند. برای نمونه، ترکیب آرایه ای کوتاه شده ی (short-array syntax) جدید به ما اجازه می دهد که
$names = array(‘Geordi’, ‘Worf’);
را با
$names = [‘Geordi’, ‘Worf’];
جایگزین کنیم. نمی توان گفت که این تغییر، یک تغییر بنیادی بوده و دنیای PHP را تغییر می دهد اما بدون تردید یک بهبود اساسی در ترکیب آرایه (array syntax) می باشد. همچنین، در مورد آرایه ها، پشتیبانی از function array dereferencing (FAD) به PHP اضافه شده است.
به عنوان یک نتیجه، این پشتیبانی، امکان استفاده از ترکیب زیر را برای ما فراهم کرده است:
function getNames()
{
return [‘riker’, ‘Wesley’];
}
echo ‘Shut up, ‘ . getNames()[1];
درکنار موارد بهبود داده شده، سرور وب داخلی (که خیلی دیر به PHP اضافه شد)، درست مانند آن چه در PHP 5.4 وجود داشت، می توان یک سرور را به سادگی و با تایپ فرمان زیر، بوت کرد:
php -S localhost:8888
می توانیم بگوییم که دنیای جدیدی روبروی ما قرار گرفته است. شاید برای شما هم باور کردنی نباشد اما بسیاری از کمبود ها و نقص های PHP برطرف شده است. البته همه ی ما مدت زیادی را منتظر مانده ایم تا این اشکال ها برطرف شوند اما به هر حال، امروز دیگر با مشکلات گذشته مواجه نخواهیم شد.
اگر نگاه دقیق تری به ویژگی های بی نظیر اضافه شده به این زبان در PHP 5.4 داشته باشیم، پشتیبانی قابل قبول آن از trait ها را مشاهده خواهیم کرد. از آن جایی که PHP تنها باقیمانده ی زبان هایی است که در آن ها از trait استفاده شده است، می تواند اشکال هایی که در استفاده ی مجدد کُد وجود دارد را برطرف کند. اگر بخواهیم چند اپلیکیشن (application یا برنامه ی کاربردی) را به وسیله ی برچسب زدن (علامت گذاری یا tagging) به یکدیگر مرتبط کنیم، می توانیم به جای تکرار این کُد معروف، از یک trait استفاده کنیم:
trait taggable {
public function tags()
{
return [‘hardcoded’, ‘tags’, ‘here’];
}
}
class P
ost {
use taggable;
}
class Photo {
use taggable;
}
$tags = (new Photo)->tags();
تردیدی در بی نظیر بودن این قابلیت PHP وجود ندارد. اگر به آخرین خط توجه کرده باشید، دسترسی به عضو های گروه (class members) به وسیله ی معرفی کردن نیز به PHP 5.4 اضافه شده است.
اگر چه قابلیت های جدید PHP 5.5 به اندازه ی ویژگی های اضافه شده در نسخه های ۵٫۳ و ۵٫۴ جذاب و قابل توجه نبودند اما بسیاری از اشکالات (bug ها و quirk ها) برای ساختار های list() و عبارت های شامل foreach برطرف شده اند.
اگر چه اضافه شدن generator ها به اندازه ی کافی قابل توجه است اما مورد دیگری که به چشم همه ی کاربران می آید، دَر هم سازی (hashing که عبارت است از تبدیل یک کلید به یک آدرس که در آن کلید ها محل اطلاعات را مشخص می کنند) کلمه ی عبور API است.
$hashedPassword = password_hash($password,
PASSWorD_BCrYPt);
if (password_verify($password, $hashedPassword))
{
// Good to go!
}

COMPOSER
تا به حال به یک مدیر غیر مستقیم به عنوان یک برنامه ی سودمند (utility) برای دانلود کردن سریع بسته (package) های قبلی اپلیکیشن (application) ها فکر کرده اید؟ با اجرای تنها یک دستور، به framework، روتِر (router)، برنامه ی سودمند وارد شدن (logging)، بسته های عضویت و هر چیز دیگری که اپلیکیشن های شما ممکن است به آن نیاز داشته باشند، دسترسی نا محدود و همیشگی خواهید داشت.
در گذشته تنها از Bundler برای انجمن Ruby و از npm برای انجمن Node.js نام می بردیم اما اکنون Composer نیز برای PHP وجود دارد (getcomposer.org).
کاربران PHP به تازگی به یک کتاب خانه ی (library) گسترده دسترسی پیدا کرده اند که PEAR نام دارد (pear.php.net). کافی است بگوییم که هیچ توسعه دهنده ی PHP در دنیا وجود ندارد که استفاده از PEAR برایش لذت بخش نبوده باشد. در حقیقت، تا کنون، هیچ جایی برای به اشتراک گذاشتن موفق کُد ها وجود ندارد. خوش بختانه، به لطف وجود Composer، امروزه انجمن کاربران از همیشه فعال تر شده است. زمانی که هر کدام از framework ها، پیاده سازی مربوط به خودشان (مانند مدیریت HTTP) را پیشنهاد می کردند، گذشته است. در ده سال اخیر و در بسیاری از موارد، Composer دارای بهترین موارد قابل اضافه شدن به PHP بوده است. در حقیقت، از آن جایی که به اشتراک گذاشتن کُد در انجمن PHP فراگیر شده است، گروه هایی مانند PHP-FIG (به نشانی www.php-fig.org) برای گفتگو درباره ی چگونگی استفاده ی بهتر از کُد ها تشکیل شده اند. نتیجه ی این گفتگو ها به شکل مشخصات گوناگون PSR نمایان شده اند که شامل موارد مختلفی از استاندارد های بار گذاری خودکار گرفته تا راهنمایی های سبک (style) کُد گذاری پیشنهادی می شوند.
برای آگاهی بیشتر، بهتر است از Composer برای نصب framework به تازگی شناخته شده ی Laravel استفاده کنیم. اگر Composer با استفاده از وب سایت رسمی آن (getcomposer.org) نصب شده باشد، نصب کردن Laravel با استفاده از یک خط دستور ساده، امکان پذیر است.
composer create-project laravel/laravel my-project
خیلی ساده بود! با اجرای همین دستور کوتاه، Lavarel بر روی سیستم شما نصب شده است. اما اگر یک برنامه ی سودمند (utility) نیز برای گسترش اپلیکیشن جدید Laravel بخواهیم، چه کار باید کرد؟ برای این کار نیز می توانیم باز هم از Composer استفاده کرده و یک بسته به نام Rocketeer
(به آدرس packagist.org/packages/anahkiasen/rocketeer)
را نصب کنیم.
composer require anahkiasen-rocketeer
به همین سادگی بود! برای مشاهده ی هزاران بسته ای که برای PHP گسترش داده شده اند به Packagist (به نشانی packagist.org) مراجعه کنید.

LARAVEL
اکنون Laravel در دسترس تمام کاربران قرار گرفته است. در حقیقت Laravel که توسط تِیلور اُتوِل (Taylor Otwell) معرفی شد، همان کاری را برای PHP انجام می دهد که Ruby on Rails برای انجمن Ruby انجام داده است. درست متوجه شده اید، Laravel تا این اندازه مهم است.
اگر باور نمی کنید، یک راه ساده اما بی نظیر برای ساختن API بعدی شما را بیان خواهیم کرد. در کنار کنترل کننده ها، Lavarel یک روش آسان (درست مانند Siantra) را برای مسیریابی (route کردن) closure ها در اختیار ما قرار داده است پس می توانیم بنویسیم:
route::get(‘posts’, function()
{
return Post::all();
});
route::get(‘posts/{id}’, function($id)
{
return Post::findorFail($id);
});
It’s so easy! Maybe we also want to nest these
routes within an  api/v1  prefix. Sure:
route::group([‘prefix’ => ‘api/v1’], function()
{
route::get(‘posts’, function()
{
return Post::all();
});
خیلی ساده بود! شاید بخواهیم از یک prefix یا پیشوند api/v1 نیز استفاده کنیم:
route::get(‘posts/{id}’, function($id)
{
r
eturn Post::find
orF
ail($id);
})
;
});
اکنون اگر یک توسعه دهنده بخواهد از api/v1/pists استفاده کند، یک نمایش JSON از تمام پُست (post) ها بازگردانده خواهد شد. اما صبر کنید، JSON؟ درست است، وقتی که یک مجموعه از یک route بازگردانده می شود، Laravel به اندازه ی کافی هوشمند است که به صورت خودکار از JSON استفاده کرده و ساده ترین راه ممکن برای ساختن API ها را در اختیار ما قرار دهد. اکنون این پرسش پیش می آید که کنترل نسخه برای پایگاه داده ها (یا همان انتقال یا migration ها) چگونه خواهد بود؟
البته Laravel در این مورد نیز پشتیبانی های لازم را دارد! با استفاده از قسمت دستور خطی، Artisan، می توانیم به سادگی بنویسیم:
php artisan migrate:make create_posts_table
همان طور که انتظار داشتیم، این framework امکان پشتیبانی از انتقال های بازگشتی (rolling back migrations)؛ راه اندازی مجدد کامل آن ها و دسته بندی جدول های پایگاه داده ها را نیز فراهم کرده است.
مهم نیست که درباره ی تبدیل رابطه ای شیء (object-relational mapping یا همان ORM)، انتقال ها، تعیین صحت یا اعتبار سنجی شهودی (intuitive validation or authentication)، مسیریابی (routing) یا یک محفظه ی IoC قدرتمند (powerful IoC container) صحبت کنیم، Laravel تمام این موارد را در اختیار کاربران قرار داده است. در حقیقت، به هزاران دلیل، این framework را می توان به عنوان پیشرو در pack، انتخاب کرد. برای نمونه، می توانیم پشتیبانی های Laravel برای صف (queue) ها را در نظر بگیریم.
در حقیقت، استفاده از queue ها و worker ها، روش هایی برای حذف وظیفه های زمان گیر را ارائه می کند که با استفاده از آن ها کاربران مجبور نیستند که برای کامل شدن کار ها (jobs) منتظر بمانند. می توانیم از Email به عنوان یک نمونه ی کامل در این مورد نام ببریم. فرستادن یک ایمیل می تواند به نسبت زمان گیر باشد (البته به اندازه ی چند ثانیه!). با استفاده از queue ها می تواینم این کار را به یک وظیفه ی پس زمینه ای (background) تبدیل کردن و به جای سه ثانیه، آن را در کمتر از یک ثانیه انجام دهیم.
در کنار پشتیبانی از worker قدیمی، Laravel از push queue های Iron.io (به نشانی iron.io) نیز پشتیبانی می کند. در چنین شرایطی، امکان استفاده از وظیفه های پس زمینه ای برای همه فراهم خواهد بود. در حقیقت Laravel به کاربران عادی نیز اجازه داده است که مانند کاربرانی که مهارت های server admin را دارند، از این ویژگی بی نظیر، استفاده کنند. تنها کاری که می بایست انجام دهید این است که به سادگی یک URL اشتراک را با استفاده از یک فرمان ساده ثبت کنید. در این حالت، هر بار که یک وظیفه ی جدید به صف (queue) شما اضافه شود، iron.io همان URL را ping می کند. هیچ framework دیگری وجود ندارد که این کار را به اندازه ی Laravel ساده کرده باشد.
اضافه کردن یک وظیفه ی جدید به صف (queue) در Laravel به ساده ترین شکل ممکن انجام می شود.
Queue::push(function($job) use ($userid)
{
Subscription::cancel($userid);

$job->delete();
})
غیر ممکن، ممکن شده است! می بینیم که Laravel به ما اجازه می دهد که closure ها را در صف (queue) قرار دهیم. در کنار سادگی شگفت انگیز، این framework امکان پشتیبانی از موارد خاصی مانند آن چه در محفظه ی IoC ایجاد می شود را نیز فراهم کرده است.
Queue::push(‘Sendemail’, [‘message’ => $message]);
این انعطاف پذیری، یکی از برتری های اصلی Laravel، که پیشرفت کردن با مهارت های توسعه دهنده است، را نشان می دهد. ترکیب پروژه های ساده یا استفاده ی چند باره از قابلیت بی نظیر وارونه سازی محفظه ی (IoC) کنترل برای ساختن اَپلیکیشن هایی که از هر نظر قابلیت بررسی (تست) شدن را دارند، یکی دیگر از ویژگی های این framework است.
می توانیم هزاران دلیل و نمونه ی عملی دیگر بیاوریم تا نشان دهیم که Laravel بهترین framework برای PHP است. مورد دیگری که درباره ی این framework جلب توجه می کند، انجمن بی نظیر آن است. به دنبال هزاران فایل آموزشی آنلاین هستید؟ می خواهید در مورد این framework کتاب های الکترونیکی با موضوعات مختلف را مطالعه کنید؟ ترجیح می دهید فیلم های آموزشی با تشریح گام به گام مطالب را مشاهده کنید؟ پیشنهاد می کنیم نگاهی به Laracasts (به نشانی laracast.com) داشته باشید. می توانیم بگوییم که Laracasts مانند RailsCasts (به نشانی railscasts.com) است با این تفاوت که به صورت روزانه به روز رسانی می شود. منابع آموزشی (آنلاین و غیر آنلاین) برای Laravel بسیار زیاد می باشند.

بررسی (آزمون یا تست) کردن
در گذشته، توسعه دهندگان PHP می گفتند که فکر نکُن، طراحی نکُن، بررسی (تست) ننویس و تنها کار خودت را انجام بده! این گفته ها ممکن بود در گذشته درست بوده باشند اما تردیدی وجود ندارد که امروزه، با شرایط دیگری روبرو شده ایم.
در حقیقت، برای بررسی (تست) کرن، هزاران چهار چوب (framework) و کتاب خانه ی (library) مختلف در دسترس ما قرار دارند. هر هفته، یک ابزار جدید بررسی (تست) بر روی GitHub قرار داده می شود! به نظر می رسد انجمن PHP می بایست در سریع ترین زمان ممکن، توسعه های مربوط به انجام بررسی (تست) را بپذیرد.
یکی از ساده ترین ابزار های بررسی (تست)، Codeception (به نشانی Codeception.com) است. البته اگر ترجیح می دهید از روش Cucumber استفاده کنید، Behat (به نشانی behat.org) نیز انتخاب مناسبی خواهد بود.
در مورد بررسی (تست) کردن واحد (unit)، انتخاب انجمن، یعنی PHPUnit (به نشانی phpunit.de)، بهترین ابزار به حساب می آید. در کنار ابزاری که برای بررسی (تست) وجود دارد، می توان از ابزار و library های گوناگون و متنوعی که برای آسان تر کردن فرآیند بررسی ها نیز در اختیار ما قرار دارند، استفاده کنیم. می توانیم از Mockery (به نشانی github.com/padraic/mockery) به جای PHPUnit استفاده کنیم.
با استفاده از Faker (به نشانی github.com/fzaninotto/Faker) می توانید داده های غیر واقعی برای انجام بررسی (تست) ها درست کنید. اگر از Laravel استفاده می کنید، بهتر است از تمام قابلیت ها و ویژگی های آن در زمان نوشتن بررسی های کاربردی برای یک اپلیکیشن، استفاده کنید.
شاید این پرسش مطرح شود که با برنامه های غیر قابل بررسی قدیمی که مجبور به اصلاح کردن و کار کردن با آن ها هستیم چه باید کرد؟ این برنامه ها را چگونه باید تست (بررسی) کرد؟ ابزار جدیدی با نام AspectMock (به نشانی github.com/Codeception/AspectMock) می تواند این مشکل را برطرف کند. با استفاده از ویژگی های بی نظیر Aspect-Oriented Programming (AOP) و همچنین کتاب خانه ی Go-AOP (به نشانی github.com/lisachenko/go-aop-php)، امکان تجزیه و تحلیل دقیق درباره ی هر چیزی برای شما فراهم شده است.
یاد آوری می کنیم که تمام این framework ها و library ها را می توانید از طریق Composer نصب نمایید.
یکی از جدید ترین framework های آزمون (تست) که به همراه API ارائه شده است، Codeception نام دارد. سادگی Codeception به اندازه ای است که تازه کار ترین افراد در دنیای کامپیوتر و اینترنت نیز می توانند از آن استفاده کنند.
برای بررسی (تست) کردن، framework ها و library های گوناگونی در دسترس شما قرار دارند.

نتیجه گیری
تردیدی وجود ندارد که کمبود ها و نقص های PHP 4 تا اندازه ای بودند که کارایی این زبان به پایین ترین سطح ممکن کاهش پیدا کرده بود. نسخه های جدید این زبان برنامه نویسی، زیبایی، کارایی و امکانات گسترده ای را در خود دارند که از هر نظر برای کاربران مفید می باشند.
بنابراین، به عنوان یک توسعه دهنده، بهتر است قبل از استفاده از نسخه های قدیمی PHP، ابتدا نگاهی به ویژگی ها و قابلیت های جدید و شگفت انگیز نسخه های جدید تر آن داشته باشید. توصیه می کنیم که به صورت منظم، مطالب اراده شده در انجمن های framework های این زبان برنامه نویسی را مطالعه کرده و از تجربیات دیگران در کار های خود استفاده کنید.
برای مطالعه ی بیشتر، به نشانی های زیر مراجعه کنید:
www.manning.com/surguy
leanpub.com/laravel-testing-decoded
leanpub.com/codebright
leanpub.com/build-apis-you-wont-hate
leanpub.com/laravel
laracasts.com
tutsplus.com

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

x

شاید بپسندید

افکت‌های انیمیشنی بر روی منوها

افکت‌های انیمیشنی بر روی منوها

از CSS برای ساخت انواع افکت و …   استفاده کنید ،بدون آن ...