۱۳۹۱/۱/۲۲، ۰۷:۱۰:۴۱ صبح
Framework های بسیار زیادی برای PHP نوشته شده است که هر کدام ویژگیها و امکانات خاص خودشان را دارد. برای برگزیدن یکی از آنها، نیاز به بررسی همه و آشنایی نسبی با آنها دارد. من مدتها بود که داشتم با اینها بازی میکردم و ویژگیها و چگونگی کار با هر کدام را میآزمودم. در این نوشته پنج Framework مشهور را برگزیدهام و به بررسی کلی هر کدام از آنها خواهم پرداخت. این بررسی میخواهد یک Overview کلی از هر کدام را نشان دهد تا برای دیگران، انتخاب آسانتر شود. Framework برگزیده خودم هم در این نوشته مشخص خواهد شد و دلایل گزینش آن را نیز میتوانید بخوانید.
Zend Framework
طبیعتا Zend Framework سرشناسترین و بالاترین گزینه ما است؛ چون که Zend، شرکتی که پشت PHP است آن را طراحی و تولید کرده است. این Framework امکانات زیادی داشته و بسیار قدرتمند است و هر آن چه که برای تولید یک پروژه بزرگ لازم داشته باشید در خود دارد. License آن هم BSD است که به شدت انعطاف پذیر بوده و شرط میکند که در صورت توسعه آن باید کد تولید شده کاملا انعطاف پذیر باشد.
همچنین این Framework از PHP 4 پشتیبانی نمیکند و تنها در PHP 5 اجرا میشود. با توجه به تلاشهای زیاد اخیر برای ارتقاء به PHP 5 در سرورها شاید این مسئله کمتر به چشم بیاید ولی به هر روی ناهماهنگی با یکی از گستردهترین نسخههای PHP در این Framework به چشم میخورد.
این Framework و کامپوننتهای فراوان آن برای پروژههای خیلی خیلی بزرگ مناسب است ولی برای خیلی از پروژهها چیزهایی را ارائه میکند که خیلی بیشتر از نیاز آنها است و همچنین به طور نسبی از پیچیدگیهایی برخوردار است. خیلی از چیزهایی که Zend Framework داره، خیلی کم کاربرد است. در هر حال، گزینه برگزیده من Zend Framework نیست. به باور من Zend Framework خیلی خوش دست نیست و یاد گرفتن آن زمان زیادتری میبرد و زمان زیادی لازم هست تا بفهمید دقیقا چگونه کار میکند. این پیچیدگی مخصوصا اگر بخواهید با یک تیم کار کنید، سبب میشود تا زمان زیادی برای آموزش تیم از بین برود. همچنین این Framework شما را به پیروی از MVC اجبار نمیکند. این مساله اگر چه از یک سو سبب انعطافپذیری میشود ولی از سوی دیگر هم ممکن است کار شما را غیر استاندارد کند.
بد نیست بدانید که در بین سایتهای ایرانی، سایت مشهور کلوب با کمک Zend Framework درست شده است.
CakePHP
یکی از مشهورترین و محبوبترین Frameworkها و یکی از بهترین برابرهای Rails در PHP به شمار میآید. از MVC کامل پشتیبانی میکند. کاربران خیلی زیاد و فعالی دارد که ویژگی مهمی به حساب میآید. اگر چه من اصلا از Mambo خوشم نمیآید ولی این CMS محبوب Mambo هم قرار است در نسخههای آینده از CakePHP استفاده کند.
اما این سیستم دو تا اشکال کوچک هم دارد. یکی این که بیش از اندازه کند است (برای خواندن گزارش یک Benchmark خوب بین CakePHP، Zend Framework و CodeIgniter اینجا را ببینید). این مساله در صورتی که هزینه سرور برای شما اهمیت داشته باشد، خودش را بیشتر نشان میدهد. دوم این که اسامی کلاسهایی CakePHP خیلی عمومی طراحی شده است. برای نمونه کلاس Database که اگر شما هم کلاس مشابهی داشته باشید، سبب ایجاد ناهماهنگی در کد شما میشود و به طور کلی چنین اسمگذاری و به کار نگرفتن پیشوند مناسب مانند Cake سبب بدبینی نسبی من به طراحی این سیستم شده است.
همچنین ORMی که در CakePHP طراحی شده است، توارث را پشتیبانی نمیکند و به باور من چندان استاندارد نیست. (با Hackهایی میتوان مشکل توارث ORM در CakePHP حل کرد. در این باره رک: Kelnishi.com)
ولی به طور کلی نصب CakePHP خیلی ساده است و راه انداختن اولیه سایت باهاش کار ساده و آسانی است. بر خلاف Zend Framework که نمیدانستید از کجا باید آغاز کنید، در CakePHP خیلی سریع میتوانید یک سایت ساده راه بیاندازید. ولی انجام کارهای پیشرفتهتر به دلیل نبودن مستندات کافی و راهنماهای مناسب کمی با CakePHP دشوار است. در هر حال گزینه انتخابی من CakePHP هم نیست.
برای خواندن یک آموزش فارسی خوب برای کار با این برنامه رک : الوان وب
Prado
از همه گزینههای دیگر متفاوت است. بر پایه MVC درست نشده است. طراح Prado این کار را برای پروژه دکترایش انجام داده است و در طراحی آن Delphi را مد نظر داشته و تلاش کرده تا یک Framework کاملا Object Oriented و Event Driven درست کند. اگر با ASP.NET کار کرده باشید، Prado را خیلی مشابه با آن خواهید یافت. در Prado همه چیز حتی یک Label و Button هم Object است که Propertyها و Eventهای خاص خودش را دارد. همچنین زبانی شبیه به HTML برای طراحی ظاهر صفحات دارد (دقیقا شبیه به ASP.NET و Tagهای asp: این زبان)
من اگر چه ASP.NET را دوست دارم و باهاش کار هم میکنم و اگر چه فکر میکنم Prado سیستم خیلی قشنگ و تمیزی است ولی Prado هم گزینه برگزیده من نیست؛ چون پشتیبانی یک سیستم از MVC برایم اهمیت زیادی دارد.
CodeIgniter
این Framework خیلی شبیه به CakePHP و از آن سادهتر و کوچکتر است و به همین خاطر هم از لحاظ سرعت از CakePHP خیلی بهتر است ولی خوب به همان اندازه هم امکانات کمتری دارد. این Framework شما را مجبور به پیروی کامل از MVC نمیکند، بنابراین برای یادگیری نوآموزان بهتر است. از Ajax هم مستقیما پشتیبانی نمیکند. ولی Code Igniter ویژگیهای خوبی هم دارد. این Framework در PHP 4 هم کار میکند و از لحاظ سبک برنامهنویسی به سبک برنامهنویسی PHP 4 نزدیک است. به همین خاطر برای Port کردن کدهای قدیمی به یک Framework گزینه مناسبی است. همچنین دارای Community بزرگی است و کامپوننتها و مثالهای فراوانی برایش پیدا میشود. این Framework هم همانند CakePHP گزینش من نیست.
symfony
این Framework امکانات بسیار زیادی دارد و ماژولهای جداگانه را برای انجام کارهای خودش به کار میگیرد: مانند DB Layer که با امکانات زیاد خودش واقعا لایه بانک اطلاعاتی شما را به بهترین شکل پشتیبانی میکند و امکان نوشتن برنامه مستقل از بانک اطلاعاتی را به شما میدهد. (اگر چه این ویژگی در Frameworkهای دیگر هم هست).
برای انجام پروژههای بزرگ symfony به خاطر امکانات زیادش، گزینه خیلی خوبی است ولی با این حال، پیچیدگیهای Zend Framework را هم ندارد. این Framework هم تنها بر روی PHP 5 کار میکند. License آن هم MIT است که License خوب و انعطافپذیری به حساب میآید. همچنین این Framework به خوبی AJAX را پشتیبانی میکند و امکاناتی برای ساختن صفحات Admin سایت دارد که کار طراحی بخش مدیریتی سایت را خیلی آسان میکند.
سیمفونی از ORM مشهوری به نام Propel بهره میگیرد که به باور من سیستم بسیار قدرتمندی است. اگر چه در CakePHP هم ORM هست ولی در آن جا از یک سیستم داخلی استفاده شده است. به کار گیری یک ORM بیرونی سبب افزایش سرعت توسعه سیمفونی شده است؛ چون که Propel سیستم خیلی مشهوری بوده و به طور عادی خودش در حال توسعه هست. این مساله همچنین هوشمندی طراحان سیمفونی را نشان میدهد.
خوب حدس زدنش سخت نیست. Framework برگزیده من symfony است. طراحی دقیق و محکم، سرعت مناسب، امکانات خیلی زیاد، مستندات و Community بزرگ آن، وجود ویژگی Admin Generator و سیستم کنترل دسترسی که سبب میشود من بتوانم در زمان طراحی صفحات سایت به مسائل مهمتر و افزودن ویژگیهای اصلی بپردازم، از دلایل این گزینش من است.
Zend Framework
طبیعتا Zend Framework سرشناسترین و بالاترین گزینه ما است؛ چون که Zend، شرکتی که پشت PHP است آن را طراحی و تولید کرده است. این Framework امکانات زیادی داشته و بسیار قدرتمند است و هر آن چه که برای تولید یک پروژه بزرگ لازم داشته باشید در خود دارد. License آن هم BSD است که به شدت انعطاف پذیر بوده و شرط میکند که در صورت توسعه آن باید کد تولید شده کاملا انعطاف پذیر باشد.
همچنین این Framework از PHP 4 پشتیبانی نمیکند و تنها در PHP 5 اجرا میشود. با توجه به تلاشهای زیاد اخیر برای ارتقاء به PHP 5 در سرورها شاید این مسئله کمتر به چشم بیاید ولی به هر روی ناهماهنگی با یکی از گستردهترین نسخههای PHP در این Framework به چشم میخورد.
این Framework و کامپوننتهای فراوان آن برای پروژههای خیلی خیلی بزرگ مناسب است ولی برای خیلی از پروژهها چیزهایی را ارائه میکند که خیلی بیشتر از نیاز آنها است و همچنین به طور نسبی از پیچیدگیهایی برخوردار است. خیلی از چیزهایی که Zend Framework داره، خیلی کم کاربرد است. در هر حال، گزینه برگزیده من Zend Framework نیست. به باور من Zend Framework خیلی خوش دست نیست و یاد گرفتن آن زمان زیادتری میبرد و زمان زیادی لازم هست تا بفهمید دقیقا چگونه کار میکند. این پیچیدگی مخصوصا اگر بخواهید با یک تیم کار کنید، سبب میشود تا زمان زیادی برای آموزش تیم از بین برود. همچنین این Framework شما را به پیروی از MVC اجبار نمیکند. این مساله اگر چه از یک سو سبب انعطافپذیری میشود ولی از سوی دیگر هم ممکن است کار شما را غیر استاندارد کند.
بد نیست بدانید که در بین سایتهای ایرانی، سایت مشهور کلوب با کمک Zend Framework درست شده است.
CakePHP
یکی از مشهورترین و محبوبترین Frameworkها و یکی از بهترین برابرهای Rails در PHP به شمار میآید. از MVC کامل پشتیبانی میکند. کاربران خیلی زیاد و فعالی دارد که ویژگی مهمی به حساب میآید. اگر چه من اصلا از Mambo خوشم نمیآید ولی این CMS محبوب Mambo هم قرار است در نسخههای آینده از CakePHP استفاده کند.
اما این سیستم دو تا اشکال کوچک هم دارد. یکی این که بیش از اندازه کند است (برای خواندن گزارش یک Benchmark خوب بین CakePHP، Zend Framework و CodeIgniter اینجا را ببینید). این مساله در صورتی که هزینه سرور برای شما اهمیت داشته باشد، خودش را بیشتر نشان میدهد. دوم این که اسامی کلاسهایی CakePHP خیلی عمومی طراحی شده است. برای نمونه کلاس Database که اگر شما هم کلاس مشابهی داشته باشید، سبب ایجاد ناهماهنگی در کد شما میشود و به طور کلی چنین اسمگذاری و به کار نگرفتن پیشوند مناسب مانند Cake سبب بدبینی نسبی من به طراحی این سیستم شده است.
همچنین ORMی که در CakePHP طراحی شده است، توارث را پشتیبانی نمیکند و به باور من چندان استاندارد نیست. (با Hackهایی میتوان مشکل توارث ORM در CakePHP حل کرد. در این باره رک: Kelnishi.com)
ولی به طور کلی نصب CakePHP خیلی ساده است و راه انداختن اولیه سایت باهاش کار ساده و آسانی است. بر خلاف Zend Framework که نمیدانستید از کجا باید آغاز کنید، در CakePHP خیلی سریع میتوانید یک سایت ساده راه بیاندازید. ولی انجام کارهای پیشرفتهتر به دلیل نبودن مستندات کافی و راهنماهای مناسب کمی با CakePHP دشوار است. در هر حال گزینه انتخابی من CakePHP هم نیست.
برای خواندن یک آموزش فارسی خوب برای کار با این برنامه رک : الوان وب
Prado
از همه گزینههای دیگر متفاوت است. بر پایه MVC درست نشده است. طراح Prado این کار را برای پروژه دکترایش انجام داده است و در طراحی آن Delphi را مد نظر داشته و تلاش کرده تا یک Framework کاملا Object Oriented و Event Driven درست کند. اگر با ASP.NET کار کرده باشید، Prado را خیلی مشابه با آن خواهید یافت. در Prado همه چیز حتی یک Label و Button هم Object است که Propertyها و Eventهای خاص خودش را دارد. همچنین زبانی شبیه به HTML برای طراحی ظاهر صفحات دارد (دقیقا شبیه به ASP.NET و Tagهای asp: این زبان)
من اگر چه ASP.NET را دوست دارم و باهاش کار هم میکنم و اگر چه فکر میکنم Prado سیستم خیلی قشنگ و تمیزی است ولی Prado هم گزینه برگزیده من نیست؛ چون پشتیبانی یک سیستم از MVC برایم اهمیت زیادی دارد.
CodeIgniter
این Framework خیلی شبیه به CakePHP و از آن سادهتر و کوچکتر است و به همین خاطر هم از لحاظ سرعت از CakePHP خیلی بهتر است ولی خوب به همان اندازه هم امکانات کمتری دارد. این Framework شما را مجبور به پیروی کامل از MVC نمیکند، بنابراین برای یادگیری نوآموزان بهتر است. از Ajax هم مستقیما پشتیبانی نمیکند. ولی Code Igniter ویژگیهای خوبی هم دارد. این Framework در PHP 4 هم کار میکند و از لحاظ سبک برنامهنویسی به سبک برنامهنویسی PHP 4 نزدیک است. به همین خاطر برای Port کردن کدهای قدیمی به یک Framework گزینه مناسبی است. همچنین دارای Community بزرگی است و کامپوننتها و مثالهای فراوانی برایش پیدا میشود. این Framework هم همانند CakePHP گزینش من نیست.
symfony
این Framework امکانات بسیار زیادی دارد و ماژولهای جداگانه را برای انجام کارهای خودش به کار میگیرد: مانند DB Layer که با امکانات زیاد خودش واقعا لایه بانک اطلاعاتی شما را به بهترین شکل پشتیبانی میکند و امکان نوشتن برنامه مستقل از بانک اطلاعاتی را به شما میدهد. (اگر چه این ویژگی در Frameworkهای دیگر هم هست).
برای انجام پروژههای بزرگ symfony به خاطر امکانات زیادش، گزینه خیلی خوبی است ولی با این حال، پیچیدگیهای Zend Framework را هم ندارد. این Framework هم تنها بر روی PHP 5 کار میکند. License آن هم MIT است که License خوب و انعطافپذیری به حساب میآید. همچنین این Framework به خوبی AJAX را پشتیبانی میکند و امکاناتی برای ساختن صفحات Admin سایت دارد که کار طراحی بخش مدیریتی سایت را خیلی آسان میکند.
سیمفونی از ORM مشهوری به نام Propel بهره میگیرد که به باور من سیستم بسیار قدرتمندی است. اگر چه در CakePHP هم ORM هست ولی در آن جا از یک سیستم داخلی استفاده شده است. به کار گیری یک ORM بیرونی سبب افزایش سرعت توسعه سیمفونی شده است؛ چون که Propel سیستم خیلی مشهوری بوده و به طور عادی خودش در حال توسعه هست. این مساله همچنین هوشمندی طراحان سیمفونی را نشان میدهد.
خوب حدس زدنش سخت نیست. Framework برگزیده من symfony است. طراحی دقیق و محکم، سرعت مناسب، امکانات خیلی زیاد، مستندات و Community بزرگ آن، وجود ویژگی Admin Generator و سیستم کنترل دسترسی که سبب میشود من بتوانم در زمان طراحی صفحات سایت به مسائل مهمتر و افزودن ویژگیهای اصلی بپردازم، از دلایل این گزینش من است.