php frameworks

4,745
-1

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,745
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
60
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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>

×