Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

php frameworks

4,986 views

Published on

Published in: Education
  • Be the first to comment

php frameworks

  1. 1. Граков Алексей Antalika.com
  2. 2. <ul><li>Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, 11-12 сентября 2008. официальный сайт: www.bynet2.org </li></ul>
  3. 3. Обычная разработка <ul><li>Cms 1 </li></ul><ul><li>Cms 2 </li></ul><ul><li>Super CMS </li></ul><ul><li>Лучшая в мире CMS, потому, что я написал ее сам! </li></ul><ul><li>Зачем что-то еще? </li></ul>
  4. 5. Потребность в фреймворках <ul><li>Разработка нестандартных проектов. </li></ul><ul><li>Желание иметь под рукой хороший инструмент, который будет: </li></ul><ul><li>- развиваться </li></ul><ul><li>- иметь хорошую документацию </li></ul><ul><li> - иметь качественный код </li></ul><ul><li>- обеспечивать достаточную гибкость </li></ul><ul><li>- содержать компоненты на все случаи жизни </li></ul><ul><li>- бесплатным </li></ul>
  5. 6. Преимущества фреймворков <ul><ul><li>Один зверь, вместо зоопарка </li></ul></ul><ul><ul><li>Ускорение сроков разработки </li></ul></ul><ul><ul><li>Меньше внимания на мелочи, больше на бизнес логику </li></ul></ul><ul><ul><li>Больший контроль над процессом и качеством разработки </li></ul></ul><ul><ul><li>Хорошая документированность </li></ul></ul><ul><ul><li>Быстрый ввод новичков на проект </li></ul></ul>
  6. 7. Php- фреймворки: <ul><li>codeIgniter </li></ul><ul><li>cakePHP </li></ul><ul><li>Symfony </li></ul><ul><li>Zend Framework </li></ul>
  7. 8. Цитируемость фреймворков в поисковиках Поисковик CakePhp Symfony CodeIgniter Zend Framework Google (world ) 3,680,000 1,440,000 544,000 3,280,000 Google EN 3,250,000 497,000 361,000 2,040,000 Google . ru 28100 20020 28,500 36,900 Yandex 90, 000 68, 000 87, 000 333, 000
  8. 9. <ul><ul><ul><ul><ul><li>Cake PHP </li></ul></ul></ul></ul></ul>
  9. 10. CakePHP:: Возможности <ul><li>Совместим с PHP4 и PHP5 </li></ul><ul><li>MVC </li></ul><ul><li>Своя файловая структура </li></ul><ul><li>Своя абстракция данных (либо Adodb, PEAR::Db) </li></ul><ul><li>Поддержка плагинов </li></ul><ul><li>Валидация </li></ul><ul><li>Scaffolding </li></ul><ul><li>Маршрутизация запросов </li></ul><ul><li>Компоненты / Хелперы / i18n </li></ul>
  10. 11. CakePHP:: Обработка запросов
  11. 12. CakePHP:: Соглашения <ul><li>Класс KissesAndHugsController должен храниться в   файле kisses_and_hugs_controller.php </li></ul><ul><li>Название модели записывается в ед. числе: Book , MyBook , и т.п.  </li></ul><ul><li>Названия таблиц должны быть в множественном числе, и через подчеркивание: my _ year _ books </li></ul><ul><li>Названия множественном числе. BooksController , OxenController . </li></ul>
  12. 13. CakePHP:: Контроллеры <ul><li>index – метод по умолчанию ( site.com/books/ ) </li></ul><ul><li>Методы контроллера   </li></ul><ul><li>beforeFilter – до логики </li></ul><ul><li>beforeRender – до view </li></ul><ul><li>afterFilter – после логики и после view </li></ul>
  13. 14. CakePHP:: Модели <ul><li>Доступные методы в каждой модели: </li></ul><ul><li>beforeFind() </li></ul><ul><li>afterFind() </li></ul><ul><li>beforeValidate() </li></ul><ul><li>beforeSave() </li></ul><ul><li>afterSave() </li></ul><ul><li>beforeDelete() </li></ul><ul><li>afterDelete() </li></ul>
  14. 15. CakePHP:: Шаблоны <ul><li>Чистый PHP </li></ul><ul><li>Smarty </li></ul><ul><li>Место нахождения шаблона: </li></ul><ul><li>/app/views/people/index. tpl </li></ul>
  15. 16. CakePHP:: Проекты <ul><li>Fileshifter.com </li></ul><ul><li>Server: Pentium 3, 733mhz, 512MB RAM, 2TB SATA RAID. </li></ul><ul><li>OS: Fedora Linux, ext3 filesystem. </li></ul><ul><li>Объем данных на сервере: 1.37 TB. </li></ul><ul><li>Ежедневный траффик : 28 GB в среднем . </li></ul><ul><li>Время отклика : 0.3-0.5 сек </li></ul>
  16. 17. <ul><li>Code Igniter </li></ul>
  17. 18. CodeIgniter <ul><li>Текущая версия 1.6.3 </li></ul><ul><li>Гибкость </li></ul><ul><li>Плагины / Хелперы </li></ul><ul><li>Скаффолдинг </li></ul><ul><li>Простота (loose coupling) </li></ul><ul><li>MVC </li></ul><ul><li>Поддержка PHP4 </li></ul><ul><li>Настройка параметров автозагрузки </li></ul>
  18. 19. CI:: Ход работы приложения
  19. 20. CodeIgniter:: модели <ul><li>Классы моделей хранятся в папке application/models/ </li></ul><ul><li>Класс: Model_name   </li></ul><ul><li>Имя файла: </li></ul><ul><li>application/models/ user_model.php </li></ul><ul><li>Загрузка: </li></ul><ul><li>$this->load->model(' Model_name '); $this-> Model_name ->function(); </li></ul>
  20. 21. CodeIgniter ::Контроллеры <ul><li>application/config/routes.php – маршруты </li></ul><ul><li>$route['default_controller'] = ‘ XXX_controller '; </li></ul><ul><li>class My_class extends Controller { …. </li></ul><ul><li>} </li></ul><ul><li>_remap () </li></ul>
  21. 22. CodeIgniter::View <ul><li>class Privet extends Controller </li></ul><ul><li>{ </li></ul><ul><li>… . </li></ul><ul><li>} </li></ul><ul><li>Загрузка: </li></ul><ul><li>$this->load->view(' name '); </li></ul>
  22. 23. <ul><li>Symfony </li></ul>
  23. 24. Symfony:: использует <ul><li>Creole – абстракция с БД </li></ul><ul><li>Propel ( PDO с 1.2) </li></ul><ul><li>Prado для i18n </li></ul><ul><li>Spyc YAML парсинг </li></ul><ul><li>Pake для командной строки (symfony 1.0) </li></ul><ul><li>Prototype, Script.aculo.us, Dynarch.com, TinyMCE </li></ul>
  24. 25. Symfony:: возможности <ul><li>I18n, l10n, cache, валидация и т.п. </li></ul><ul><li>Scaffolding </li></ul><ul><li>Генерация кода </li></ul><ul><li>AdminGenerator </li></ul><ul><li>Независимые блоки ( Loose coupling) </li></ul><ul><li>Маршрутизация </li></ul><ul><li>Хелперы </li></ul><ul><li>Debug </li></ul>
  25. 26. Symfony:: особенности <ul><li>Все классы начинаются с ‘sf’ (стандартные) </li></ul><ul><li>class ##MODULE_NAME##Actions extends sfActions </li></ul><ul><li>Много различного рода конфигурационных файлов. </li></ul>
  26. 28. Symfony:: Известные проекты <ul><li>bookmarks.yahoo.com (20 млн пользователей) </li></ul><ul><li>www.splitgames.fr (сайт обмена играми) </li></ul><ul><li>www.kuss.de ( сайт знакомств) </li></ul><ul><li>www.winkel.ro (доска объявлений) </li></ul>
  27. 30. Zend Framework (ZF) <ul><li>Acl ( роли и ресурсы) </li></ul><ul><li>Auth (openId, Microsoft InfoCard) </li></ul><ul><li>Cache / Loader Config / Console_Getopt (cli) </li></ul><ul><li>Date ( i18n, l10N) / Db </li></ul><ul><li>Filter, Validate (34) / Gdata (Zend Google Data Client) </li></ul><ul><li>Http_Client / Json / Locale, Log, Mail, Mime, Registry </li></ul><ul><li>Rest_Client / Rest_Server </li></ul><ul><li>Service: Akismet, Amazon, Delicious, Flickr, Nirvanix, Simpy, StrikeIron и Yahoo! / XmlRpc </li></ul>
  28. 31. Новое в ZF 1.6 RC1 <ul><li>Интеграция с Dojo </li></ul><ul><li>Поддержка с SOAP </li></ul><ul><li>Unit -тесты для контроллеров </li></ul><ul><li>Поддержка индексных файлов Lucene 2.3 </li></ul><ul><li>Zend_Session – обработчик сохранения </li></ul><ul><li>Paginator </li></ul><ul><li>Zend_Config_Xml – поддержка атрибутов </li></ul><ul><li>Медиа хелперы ( QuickTime, Flash) </li></ul>
  29. 32. ZF в цифрах <ul><li>Более 7 миллионов загрузок </li></ul><ul><li>Более 500 разработчиков </li></ul><ul><li>Более 1000 страниц в справочнике </li></ul><ul><li>Более 500 примеров </li></ul><ul><li>Более 60 проектов на SourceForge </li></ul><ul><li>Более 30 проектов на Google Code </li></ul><ul><li>Около 70 различных компонентов. </li></ul>
  30. 33. ZF:: соглашения <ul><li>Class My_Class_Name должен находится в файле : </li></ul><ul><li>My/Class/Name.php </li></ul><ul><li>C тиль кода во многом совпадает со стилями PEAR </li></ul>
  31. 34. ZF::Front Controller Pattern
  32. 35. Zend_Controller_Response_Http Zend_Controller_Front Zend_Controller_Roulter_Rewrite ( выбирает action для запуска ) Zend_Controller_Dispatcher_Standard ( вызыает action) Zend_Controller_Action ( конкретный ) Using Zend_Action_Helper Zend_Controller_Request Zend_View ( использует Zend_View_Helper) Zend_Db_Table (Model ) Т.е. тут может быть Custom Model
  33. 36. ZF:: Модели <ul><li>Zend_Db_Table </li></ul><ul><li>PDO </li></ul><ul><li>$db = Zend_Db::factory($cfgDb->type, $params); </li></ul><ul><li>Zend_Db_Table::setDefaultAapter($db); </li></ul><ul><li>Zend_Registry::set(&quot;DB&quot;, $db); </li></ul>
  34. 37. ZF:: Контроллеры <ul><li>Zend_Controller_Action </li></ul><ul><li>ErrorHandler plugin </li></ul><ul><li>ViewRenderer action helper plugin </li></ul><ul><li>preDispatch </li></ul><ul><li>postDispatch </li></ul><ul><li>Init </li></ul>
  35. 38. ZF::View <ul><li>interface Zend_View_Interface </li></ul><ul><li>public function render($name); </li></ul><ul><li>public function assign($name); </li></ul><ul><li>Zend_View_Abstract </li></ul><ul><li>basePath, filters, helpers, _setHelperClass (filter) </li></ul><ul><li>Zend/Controller/Action/Helper/ViewRenderer .php </li></ul><ul><li>MyClass_View_Smarty extends Zend_View_Abstract </li></ul>
  36. 39. ZF:: Проекты <ul><li>www.magentocommerce.com – движок для e-commerce, 0.5 млн скачиваний, 30 K users , 70 партнеров, 60+ языков, 150+ расширений (no java!) </li></ul><ul><li>RightMedia – online реклама ( NY) </li></ul><ul><li>4-5 млрд показов в день, 100 K запросов / с, 19 K рекламодателей и партнеров (5 dev-6m) </li></ul><ul><li>QEDWiki – IBM (mashups) </li></ul><ul><li>PokerRoom.com – 12 млн users (25 srv, 16front, 9mysql, i18n, docs, routes:{playpoker, pokerSpielen}: (seo), ZP+JavaBridge </li></ul>
  37. 40. Производительность <ul><li>Почти Hello World test ;-) </li></ul>
  38. 41. Обычная страница без ORM <ul><li>Ыф </li></ul><ul><li>Вид теста: ab – n 1000 – c XXX </li></ul><ul><li>512 ram, Intel Pentium 14oo MHz , Windows XP </li></ul>1 10 50 cakePhp 5.21 4.98 5.02 Zend 7.67 7.86 7.77 CodeIgniter 1 6 . 13 15.44 15.42
  39. 42. Вместе с ORM , без кеша. <ul><li>Ыф </li></ul><ul><li>512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) </li></ul>1 10 50 cakePhp 3.6 3.7 3.8 Zend 21.5 21.2 21.7 CodeIgniter 9.3 9.1 9.2
  40. 43. Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) Вместе с ORM , APC кэшем <ul><li>Ыф </li></ul>1 10 50 cakePhp 7.3 7.3 7.3 Zend 97.5 98.0 96.6 CodeIgniter 32.8 33.3 31.8
  41. 44. Symfony performance
  42. 45. <ul><li>Проект на </li></ul><ul><li>Zend Framework </li></ul>
  43. 46. ZF:: Пример проекта. <ul><li>Создаем сайт-сообщество. Несколько языков, несколько доменов, различные уровни доступа к ресурсам, маршрутизация, ORM. </li></ul>
  44. 47. Организация разработки <ul><li>Zend Studio for Eclipse (или просто phpEclipse) </li></ul><ul><li>Cruise Control + phpUnderControl </li></ul><ul><li>PHPUnit ( Себастьян Бергман) </li></ul><ul><li>Smarty </li></ul><ul><li>SVN </li></ul><ul><li>Ajax: xajax/jQuery/Dojo/Prototype/ и т.д. </li></ul><ul><li>Firebug + FirePhp (FireZend) </li></ul><ul><li>ORM (Doctrine) </li></ul><ul><li>Memcached </li></ul>
  45. 48. Zend_Config <ul><li>site.ru.xml </li></ul><ul><li>site.eu.xml </li></ul><ul><li>site.zone.xml </li></ul><ul><li><languages> </li></ul><ul><li><language>en</language> </li></ul><ul><li><language>ru</language> </li></ul><ul><li></languages> </li></ul>
  46. 49. bootstrap.php <ul><li>initView(); </li></ul><ul><li>initRoutes(); </li></ul><ul><li>initFrontend(); </li></ul>
  47. 50. <ul><li>$view = new Socnet_View_Smarty(); </li></ul><ul><li>$vRender = new Zend_Controller_Action_Helper_ViewRenderer($view); </li></ul><ul><li>$vRender->setViewBasePathSpec( </li></ul><ul><li>dirname( __FILE__).'/V/smarty/templates') </li></ul><ul><li>->setViewScriptPathSpec( ':module/:controller/:action.:suffix') </li></ul><ul><li>->setViewScriptPathNoControllerSpec( ':action.:suffix') </li></ul><ul><li>->setViewSuffix( 'tpl'); </li></ul><ul><li>Zend_Controller_Action_HelperBroker::addHelper($vRender); </li></ul>
  48. 51. Auth: <ul><li>$authAdapter = new Zend_Auth_Adapter_DbTable( </li></ul><ul><li>$db, 'user', 'login', 'pass'); </li></ul><ul><li>Zend_Registry::set(&quot;Auth&quot;, $authAdapter); </li></ul><ul><li>Class myAdapter extends Zend_Auth_Adapter_Interface </li></ul><ul><li>public function authenticate(); </li></ul>
  49. 52. ACL <ul><li>$roleAdmin = new Zend_Acl_Role(Socnet_Auth_Acl::ADMIN); </li></ul><ul><li>$this->addRole($roleAdmin, $roleMember); </li></ul><ul><li>$this->addResource( 'forum/topic'); </li></ul><ul><li>$this->deny( null, null); // Запрет всем для всего. </li></ul><ul><li>$this->allow( null, 'forum'); // всем доступ к форуму </li></ul><ul><li>$this->allow( null, 'ajax'); // всем к ajax </li></ul><ul><li>$this->allow( $admin, ‘admin'); </li></ul>
  50. 53. Маршрутизация <ul><li>$route = new Zend_Controller_Router_Route(ajax/:widgetName/:widgetAction', </li></ul><ul><li>array( </li></ul><ul><li>'controller' => ‘ajax', </li></ul><ul><li>'action' => 'index', </li></ul><ul><li>'widgetName' => '', </li></ul><ul><li>'widgetAction' => 'index' </li></ul><ul><li>)); </li></ul><ul><li>$router->addRoute( 'widget_request', $route); </li></ul>
  51. 55. Unit- тестирование <ul><li>/tests </li></ul><ul><li>Auth </li></ul><ul><li>Controller </li></ul><ul><li> Domain </li></ul><ul><li>Model </li></ul><ul><li>Members </li></ul><ul><li>AllTests.php </li></ul><ul><li>setUpEnvinronment.php </li></ul>
  52. 58. Модели <ul><li>/generated </li></ul><ul><li>|- BaseModelName </li></ul><ul><li>ParticularModel extends BaseModelName </li></ul><ul><li>phpDoctrine </li></ul><ul><li>.yml </li></ul><ul><li>fixtures </li></ul>
  53. 59. <ul><li>if (extension_loaded('memcache')) { </li></ul><ul><li>$frontendOptions = array( </li></ul><ul><li>'lifetime' => 7200, // cache lifetime of 2 hours </li></ul><ul><li>'automatic_serialization' => true </li></ul><ul><li>); </li></ul><ul><li>$backendOptions = array(); </li></ul><ul><li>$frontend = 'Core'; </li></ul><ul><li>$backend = 'Memcached'; </li></ul><ul><li>} else { </li></ul><ul><li>$frontendOptions = array( </li></ul><ul><li>'lifetime' => 7200, // cache lifetime of 2 hours </li></ul><ul><li>'automatic_serialization' => true </li></ul><ul><li>); </li></ul><ul><li>$backendOptions = array( </li></ul><ul><li>'cache_dir' => dirname(__FILE__).'/../tmp/' // </li></ul><ul><li>); </li></ul><ul><li>$frontend = 'Core'; $backend = 'File'; </li></ul><ul><li>} </li></ul><ul><li>$cache = Zend_Cache::factory($frontend, $backend, </li></ul><ul><li>$frontendOptions, $backendOptions); </li></ul><ul><li>Zend_Registry::set( 'cache', $cache); </li></ul>
  54. 60. Диспетчеризация <ul><li>extends Zend_Controller_Dispatcher_Standard </li></ul><ul><li>$action = $this->getActionMethod($request); </li></ul><ul><li>$doCall = !method_exists($controller, $action); </li></ul><ul><li>$request->setDispatched( true); </li></ul><ul><li>$controller->preDispatch(); </li></ul><ul><li>$xajaxargs = $controller->_page->Xajax->getRequestParams(); </li></ul><ul><li>$sResponse = call_user_func_array( array(&$controller, $action),$xajaxargs); </li></ul><ul><li>if (is_a($sResponse, &quot;xajaxResponse&quot;)) { </li></ul><ul><li>$sResponse = $sResponse->getXML(); </li></ul><ul><li>} </li></ul><ul><li>header($sContentHeader); </li></ul>
  55. 61. motofriends.ru
  56. 62. Выводы:
  57. 63. Полезные ссылки <ul><li>Cakephp.org (cake-php.ru) – сайт фреймворка </li></ul><ul><li>Cakeforge.com – набор готовых проектов на cake </li></ul><ul><li>codeigniter.com (code-igniter.ru) – сайт фреймворка </li></ul><ul><li>symfony-project.org - сайт фреймворка </li></ul><ul><li>Framework.zend.com - сайт фреймворка </li></ul><ul><li>Zendframework.ru - русский сайт + wiki ( новый) </li></ul><ul><li>http://habrahabr.ru/blogs/zend_framework/31639/ (Интеграция Zend_Acl и MVC. Часть 1) </li></ul><ul><li>http://lobach.info/develop/zf/integrating-zend-framework-and-doctrine/ (Интеграция Zend and Doctrin e ) </li></ul><ul><li>http://phpimpact.wordpress.com/2008/08/04/php-applications-where-is-the-include-coming-from/ ( откуда инклюды) </li></ul><ul><li>http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html (Prepared statements in mysql ) </li></ul><ul><li>http://vanav.com.ua/post397 ( Сравнение скорости PDO, ADOdb, MDB2, Zend_Db , и т.п.) </li></ul><ul><li>http://club.shelek.ru/viewart.php?id=300 (Сравнительный тест систем кэширования user data для PHP) </li></ul><ul><li>http://www.dklab.ru/chicken/nablas/49.html ( оптимизация Загрузки в 22 раза - Котеров) </li></ul><ul><li>http :// zendframework . ru / articles / chto _ takoe _ zend _ framework / (обзорно про ZF) </li></ul><ul><li>http :// kpumuk . info / php / zend - framework - router - for - subdirectory - based - site /# more -31 ( Роутеры в Zend) </li></ul><ul><li>http://devzone.zend.com/article/3811-Using-Zend_Tool-to-start-up-your-ZF-Project (Zend _ Tool – для создания рабочей копии проекта </li></ul><ul><li>http://www.avnetlabs.com/php/php-frameworks-revisited-codeigniter-vs-zend-framework ( еще одно сравнение фреймворков) </li></ul><ul><li>http://snook.ca/archives/php/codeigniter_vs_cakephp/ ( CI vs Cake) </li></ul><ul><li>http://www.avnetlabs.com/php/php-framework-comparison-benchmarks ( Довольно хорошие сравнительные тесты) </li></ul>
  58. 64. <ul><li>http://phpimpact.wordpress.com/2008/07/28/zend-framework-architecture/ ( архитектура Zend’a) </li></ul><ul><li>http :// wiki . ringsidenetworks . org / display / ringside / Layering + and + Caching + Design ( слои в архитектуре ) </li></ul><ul><li>http://www.zend.com/en/products/platform/ (Zend Platform – aka Php Application Server – стоит почитать) </li></ul><ul><li>http://phpimpact.wordpress.com/category/frameworks/ (много интересных статей) </li></ul><ul><li>http :// www . setti . biz /574/ (сравнение CodeIgniter с Cake ) </li></ul><ul><li>http://ajaxpatterns.org/Frameworks_Matrix (матрица JS -фреймворков) </li></ul><ul><li>http://www.symfony-project.org/tutorial/1_0/my-first-project (Symfony: 1st project ) </li></ul><ul><li>http://paul-m-jones.com/blog/?p=236 (обзор производительности) </li></ul><ul><li>http://manual.cakephp.org/view/326/the-cake-blog-tutorial (1-й проект на cake) </li></ul>
  59. 65. Есть вопросы? <ul><li>[email_address] </li></ul><ul><li>Icq: 286-41-77-45 </li></ul><ul><li>Skype: horal777 </li></ul><ul><li>Алексей Граков </li></ul>

×