SlideShare a Scribd company logo
PHP Frameworks
    choice


             Pawel Graczyk
             Chicago
             October 15th, 2012
What should we expect from framework?


 ●   Based on PHP platform
 ●   MVC
 ●   Friendly for modern approach (agile and decoupled)
 ●   Contain all features necessary for advanced system
 ●   Well tested (unit tests)
 ●   Stability
 ●   Active community of users
 ●   Active development over next 3-5 years
 ●   Easy to learn
Possible choices



●   Zend Framework 1 (http://framework.zend.com/)
●   Zend Framework 2 (http://framework.zend.com/)
●   Symfony 2 (http://symfony.com/)
●   Lithium (http://lithify.me/)
●   Yii (http://www.yiiframework.com/)
Zend Framework 1 - Matthew Weier O'Phinney
(http://mwop.net/)

+ Based on PHP platform
+ MVC
- Friendly for modern approach (agile and decoupled)
- Ready for third-party products
- Use new features from PHP 5.3 (namespaces etc.)
- Less magic
+ Contain all features necessary for advanced system
- Well tested (unit tests)
+ Stability
+/- Active community of users
- Active development over next 3-5 years
-/+ Easy to learn
- Integrated with modern template system
- Ready for reusable code (modules introduced too late)
Zend Framework 2 - Matthew Weier O'Phinney
(http://mwop.net/)

+ Based on PHP platform
+ MVC
+ Friendly for modern approach (agile and decoupled)
+/- Ready for third-party products
+ Use new features from PHP 5.3 (namespaces etc.)
+ Less magic
+/- Contain all features necessary for advanced system
+ Well tested (unit tests)
+/- Stability
+/- Active community of users
+ Active development over next 3-5 years
+ Easy to learn
- Integrated with modern template system
-+Reusable (modules as a first class citizens)
Symfony 2 - Fabien potencier (http://fabien.
potencier.org/)

+ Based on PHP platform
+ MVC
+ Friendly for modern (agile) approach
+ Ready for third-party products
+ Use new features from PHP 5.3 (namespaces etc.)
+ Less magic
+ Contain all features necessary for advanced system
+ Well tested (unit tests)
+ Stability
+ Active community of users
+ Active development over next 3-5 years
+ Easy to learn
+ Integrated with modern template system
+ Reusable (bundles as a first class citizens everything is a bundle)
ZF1 vs (ZF2 / S2)



"How agile do we want to be?"
For ZF1
 ● We know ZF1 (but do we really know it?)
 ● More developers on the market familiar with ZF1
 ● Not too agile (strongly coupled)

For (ZF2 / S2)
 ● Easy to learn
 ● More developers on the market who WANTS TO work with
     modern technologies (ZF2 / S2)
 ● More agile (decoupled)
ZF2 vs S2 - Architecture



"Do we want to have a full stack or library?"
For ZF2 (library) - have a initial setup but more configuration is
needed. Less experienced developers are tempted to "do it better" or
"fix something in framework". It often leads to code very difficult to
maintain by team of people.

For S2 (full stack) - Provides initial setup and supports python like
philosophy of "One good way of doing something".
Less experienced developers are less tempted to extend a framework.
Framework is strongly decoupled, developer have a freedom of
different setup.
ZF2 vs S2 - Stability
For ZF2

Stable for over 1 month. Current version: 2.0.2

 ●   Stable, but is it stable enough?


For S2

Stable for over 1 year. Current version: 2.1.2

 ●   Rock solid stable
ZF2 vs S2 - Reusable code
Bundle/Module - reusable code ready to use "out of the box". It may
contain all parts of MVC.

Examples: zf-assetic-module or FOSUserBundle

For ZF2

 ●   Over a 100 of modules (http://modules.zendframework.com/)
 ●   Most of modules still in development


For S2

 ●   1696 bundles - (http://knpbundles.com/)
 ●   Lots of third-party bundles have quality not worse than framework
     and are used for default configuration.
ZF2 vs S2 - Learning curve
Convention over configuration - things works in most expected way by
default. The effort is needed to change the way things works but not
to make them work.
Magic - Lack of clarity in system behaviour. Unnecessary
automatisation. Things happen and appear unexpectedly.

For ZF2

 ●   less magic (???)
 ●   convention over configuration (???)

For S2
 ● less magic
 ● convention over configuration

Both are easier to learn than ZF1
ZF2 vs S2 - Usage of framework components
ZF2 is used by:
 ● ???
S2 is used by
 ●   Silex: BrowerKit, CssSelector, DomCrawler, EventDispatcher,
     HttpFoundation, HttpKernel, Routing, Form, Translation, Validator
 ●   Goutte: BrowserKit, DomCrawler, CssSelector, Process,
     ClassLoader, Finder
 ●   Behat: Console, DependencyInjection, EventDispatcher, Finder,
     Yaml, Config, Translation
 ●   Assetic: Process
 ●   Doctrine2: Console, Yaml
 ●   Propel2: Console, ClassLoader, Yaml
 ●   PHPUnit: Yaml
 ●   FLOW3: Yaml
 ●   Midguard CMS: most of them in their next version?
 ●   phpBB 4: most of them?
 ●   Drupal 8*
What I like about Symfony 2
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
●
●                          ●
●                          ●
●                          ●
●                          ●
●                          ●
                           ●
●                          ●
●                          ●
●
ZF1 vs ZF2 vs S2 - summary
●   ZF1 - Outdated.
●   ZF2 - Many initial ideas and requirements was abandoned. The
    result is framework quite similar to S2 but with less features and
    possibly worse stability (for today at least).
●   S2 - Stable and more comprehensive. "Battery included"
    approach.
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice
Frameworks choice

More Related Content

What's hot

Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020
César Hernández
 
find & improve some bottleneck in Debian project (DebConf14 LT)
find & improve some bottleneck in Debian project (DebConf14 LT)find & improve some bottleneck in Debian project (DebConf14 LT)
find & improve some bottleneck in Debian project (DebConf14 LT)
Hideki Yamane
 
Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020
César Hernández
 
Effectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP ProjectsEffectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP Projects
Andrew Yatsenko
 
Test Driven Development with PHP
Test Driven Development with PHPTest Driven Development with PHP
Test Driven Development with PHP
Rogério Vicente
 
Counterclockwise past present future
Counterclockwise  past present futureCounterclockwise  past present future
Counterclockwise past present futurelolopetit
 
Ng-Conf 2015 Report : AngularJS 1 & 2
Ng-Conf 2015 Report : AngularJS 1 & 2Ng-Conf 2015 Report : AngularJS 1 & 2
Ng-Conf 2015 Report : AngularJS 1 & 2
Nicolas PENNEC
 
Ploneide
PloneidePloneide
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
Paving the road with Jakarta EE  and Apache TomEE - JCON 2021Paving the road with Jakarta EE  and Apache TomEE - JCON 2021
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
César Hernández
 
Creando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUGCreando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUG
César Hernández
 

What's hot (11)

Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020
 
find & improve some bottleneck in Debian project (DebConf14 LT)
find & improve some bottleneck in Debian project (DebConf14 LT)find & improve some bottleneck in Debian project (DebConf14 LT)
find & improve some bottleneck in Debian project (DebConf14 LT)
 
Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020
 
Kshitij
KshitijKshitij
Kshitij
 
Effectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP ProjectsEffectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP Projects
 
Test Driven Development with PHP
Test Driven Development with PHPTest Driven Development with PHP
Test Driven Development with PHP
 
Counterclockwise past present future
Counterclockwise  past present futureCounterclockwise  past present future
Counterclockwise past present future
 
Ng-Conf 2015 Report : AngularJS 1 & 2
Ng-Conf 2015 Report : AngularJS 1 & 2Ng-Conf 2015 Report : AngularJS 1 & 2
Ng-Conf 2015 Report : AngularJS 1 & 2
 
Ploneide
PloneidePloneide
Ploneide
 
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
Paving the road with Jakarta EE  and Apache TomEE - JCON 2021Paving the road with Jakarta EE  and Apache TomEE - JCON 2021
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
 
Creando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUGCreando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUG
 

Similar to Frameworks choice

Sunshine php practical-zf1-zf2-migration
Sunshine php practical-zf1-zf2-migrationSunshine php practical-zf1-zf2-migration
Sunshine php practical-zf1-zf2-migration
Clark Everetts
 
Zend con practical-zf1-zf2-migration
Zend con practical-zf1-zf2-migrationZend con practical-zf1-zf2-migration
Zend con practical-zf1-zf2-migrationClark Everetts
 
Plone Intranet under the hood
Plone Intranet under the hoodPlone Intranet under the hood
Plone Intranet under the hood
Guido Stevens
 
Modularity problems
Modularity  problemsModularity  problems
Modularity problems
Юлия Коваленко
 
Go Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii ShapovalGo Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii Shapoval
GlobalLogic Ukraine
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadays
Yankee Nemoy
 
Expressive Microservice Framework Blastoff
Expressive Microservice Framework BlastoffExpressive Microservice Framework Blastoff
Expressive Microservice Framework Blastoff
Adam Culp
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
GR8Conf
 
Structure of Chamilo 1.10: a new awakening
Structure of Chamilo 1.10: a new awakeningStructure of Chamilo 1.10: a new awakening
Structure of Chamilo 1.10: a new awakening
Chamilo Association
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
ElasTest Project
 
Using Zend Framework 2 Book Presentation
Using Zend Framework 2 Book PresentationUsing Zend Framework 2 Book Presentation
Using Zend Framework 2 Book Presentation
olegkrivtsov
 
Hong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thHong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8th
Wong Hoi Sing Edison
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadaysloadays
 
Managing multiple environments with Ansible
Managing multiple environments with AnsibleManaging multiple environments with Ansible
Managing multiple environments with Ansible
jtyr
 
OpenERP 6.1 Framework Changes
OpenERP 6.1 Framework ChangesOpenERP 6.1 Framework Changes
OpenERP 6.1 Framework Changes
Odoo
 
Kubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad Assis
Kubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad AssisKubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad Assis
Kubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad Assis
AgileSparks
 
µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015
Izzet Mustafaiev
 
Vietnam qa meetup
Vietnam qa meetupVietnam qa meetup
Vietnam qa meetup
Syam Sasi
 
Liferay portals in real projects
Liferay portals  in real projectsLiferay portals  in real projects
Liferay portals in real projects
IBACZ
 
Starting with Symfony2
Starting with Symfony2Starting with Symfony2
Starting with Symfony2Kevin Bond
 

Similar to Frameworks choice (20)

Sunshine php practical-zf1-zf2-migration
Sunshine php practical-zf1-zf2-migrationSunshine php practical-zf1-zf2-migration
Sunshine php practical-zf1-zf2-migration
 
Zend con practical-zf1-zf2-migration
Zend con practical-zf1-zf2-migrationZend con practical-zf1-zf2-migration
Zend con practical-zf1-zf2-migration
 
Plone Intranet under the hood
Plone Intranet under the hoodPlone Intranet under the hood
Plone Intranet under the hood
 
Modularity problems
Modularity  problemsModularity  problems
Modularity problems
 
Go Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii ShapovalGo Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii Shapoval
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadays
 
Expressive Microservice Framework Blastoff
Expressive Microservice Framework BlastoffExpressive Microservice Framework Blastoff
Expressive Microservice Framework Blastoff
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
 
Structure of Chamilo 1.10: a new awakening
Structure of Chamilo 1.10: a new awakeningStructure of Chamilo 1.10: a new awakening
Structure of Chamilo 1.10: a new awakening
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
 
Using Zend Framework 2 Book Presentation
Using Zend Framework 2 Book PresentationUsing Zend Framework 2 Book Presentation
Using Zend Framework 2 Book Presentation
 
Hong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thHong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8th
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadays
 
Managing multiple environments with Ansible
Managing multiple environments with AnsibleManaging multiple environments with Ansible
Managing multiple environments with Ansible
 
OpenERP 6.1 Framework Changes
OpenERP 6.1 Framework ChangesOpenERP 6.1 Framework Changes
OpenERP 6.1 Framework Changes
 
Kubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad Assis
Kubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad AssisKubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad Assis
Kubernetes is Hard! Lessons Learned Taking Our Apps to Kubernetes by Eldad Assis
 
µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015
 
Vietnam qa meetup
Vietnam qa meetupVietnam qa meetup
Vietnam qa meetup
 
Liferay portals in real projects
Liferay portals  in real projectsLiferay portals  in real projects
Liferay portals in real projects
 
Starting with Symfony2
Starting with Symfony2Starting with Symfony2
Starting with Symfony2
 

Recently uploaded

Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 

Recently uploaded (20)

Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 

Frameworks choice

  • 1. PHP Frameworks choice Pawel Graczyk Chicago October 15th, 2012
  • 2. What should we expect from framework? ● Based on PHP platform ● MVC ● Friendly for modern approach (agile and decoupled) ● Contain all features necessary for advanced system ● Well tested (unit tests) ● Stability ● Active community of users ● Active development over next 3-5 years ● Easy to learn
  • 3. Possible choices ● Zend Framework 1 (http://framework.zend.com/) ● Zend Framework 2 (http://framework.zend.com/) ● Symfony 2 (http://symfony.com/) ● Lithium (http://lithify.me/) ● Yii (http://www.yiiframework.com/)
  • 4. Zend Framework 1 - Matthew Weier O'Phinney (http://mwop.net/) + Based on PHP platform + MVC - Friendly for modern approach (agile and decoupled) - Ready for third-party products - Use new features from PHP 5.3 (namespaces etc.) - Less magic + Contain all features necessary for advanced system - Well tested (unit tests) + Stability +/- Active community of users - Active development over next 3-5 years -/+ Easy to learn - Integrated with modern template system - Ready for reusable code (modules introduced too late)
  • 5. Zend Framework 2 - Matthew Weier O'Phinney (http://mwop.net/) + Based on PHP platform + MVC + Friendly for modern approach (agile and decoupled) +/- Ready for third-party products + Use new features from PHP 5.3 (namespaces etc.) + Less magic +/- Contain all features necessary for advanced system + Well tested (unit tests) +/- Stability +/- Active community of users + Active development over next 3-5 years + Easy to learn - Integrated with modern template system -+Reusable (modules as a first class citizens)
  • 6. Symfony 2 - Fabien potencier (http://fabien. potencier.org/) + Based on PHP platform + MVC + Friendly for modern (agile) approach + Ready for third-party products + Use new features from PHP 5.3 (namespaces etc.) + Less magic + Contain all features necessary for advanced system + Well tested (unit tests) + Stability + Active community of users + Active development over next 3-5 years + Easy to learn + Integrated with modern template system + Reusable (bundles as a first class citizens everything is a bundle)
  • 7. ZF1 vs (ZF2 / S2) "How agile do we want to be?" For ZF1 ● We know ZF1 (but do we really know it?) ● More developers on the market familiar with ZF1 ● Not too agile (strongly coupled) For (ZF2 / S2) ● Easy to learn ● More developers on the market who WANTS TO work with modern technologies (ZF2 / S2) ● More agile (decoupled)
  • 8. ZF2 vs S2 - Architecture "Do we want to have a full stack or library?" For ZF2 (library) - have a initial setup but more configuration is needed. Less experienced developers are tempted to "do it better" or "fix something in framework". It often leads to code very difficult to maintain by team of people. For S2 (full stack) - Provides initial setup and supports python like philosophy of "One good way of doing something". Less experienced developers are less tempted to extend a framework. Framework is strongly decoupled, developer have a freedom of different setup.
  • 9. ZF2 vs S2 - Stability For ZF2 Stable for over 1 month. Current version: 2.0.2 ● Stable, but is it stable enough? For S2 Stable for over 1 year. Current version: 2.1.2 ● Rock solid stable
  • 10. ZF2 vs S2 - Reusable code Bundle/Module - reusable code ready to use "out of the box". It may contain all parts of MVC. Examples: zf-assetic-module or FOSUserBundle For ZF2 ● Over a 100 of modules (http://modules.zendframework.com/) ● Most of modules still in development For S2 ● 1696 bundles - (http://knpbundles.com/) ● Lots of third-party bundles have quality not worse than framework and are used for default configuration.
  • 11. ZF2 vs S2 - Learning curve Convention over configuration - things works in most expected way by default. The effort is needed to change the way things works but not to make them work. Magic - Lack of clarity in system behaviour. Unnecessary automatisation. Things happen and appear unexpectedly. For ZF2 ● less magic (???) ● convention over configuration (???) For S2 ● less magic ● convention over configuration Both are easier to learn than ZF1
  • 12. ZF2 vs S2 - Usage of framework components ZF2 is used by: ● ??? S2 is used by ● Silex: BrowerKit, CssSelector, DomCrawler, EventDispatcher, HttpFoundation, HttpKernel, Routing, Form, Translation, Validator ● Goutte: BrowserKit, DomCrawler, CssSelector, Process, ClassLoader, Finder ● Behat: Console, DependencyInjection, EventDispatcher, Finder, Yaml, Config, Translation ● Assetic: Process ● Doctrine2: Console, Yaml ● Propel2: Console, ClassLoader, Yaml ● PHPUnit: Yaml ● FLOW3: Yaml ● Midguard CMS: most of them in their next version? ● phpBB 4: most of them? ● Drupal 8*
  • 13. What I like about Symfony 2 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
  • 14. ZF1 vs ZF2 vs S2 - summary ● ZF1 - Outdated. ● ZF2 - Many initial ideas and requirements was abandoned. The result is framework quite similar to S2 but with less features and possibly worse stability (for today at least). ● S2 - Stable and more comprehensive. "Battery included" approach.