Yii, frameworks and where PHP is           heading to                             Alexander Makarov                       ...
Is PHP still there?• Developers are migrating to  – Ruby  – Python  – Java  – C++• Developers are migrating…• Because… PHP...
Well, it sucks a bit. Not that much!• Very good choice for web development.• Will be there for a long time.• Programming l...
PHP is good for business• It’s web-focused.• Lots of ready to use stuff.• PHP makes everything easy.• Easy to find and rep...
Good choice for business → Good     choice for developer.
PHP itself is heading towards          simplicity and usability•   Password hashing API.•   Generators.•   More consistenc...
And that’s the way to go!
What about frameworks?
Good things first• github = standard for hosting cool PHP stuff.• PSR-0 = interoperable & faster class loading.• At least ...
Now not that good things…
“Enterprise”• ZF 2 and Symfony2 are very “enterprise”.• Much more “enterprise” than ZF1 and  symfony were.
This “enterprise” shit is too complex
“ZF2 is too "scientific". You can write a thesisabout ZF2 and its design. Dont get me wrong, Ilove best practices, standar...
But why becoming complex instead of           being simple?
Why ZF2 is what it is• Zend is the PHP company, they’ll have enough  customers no matter what they’ll release.• Main custo...
It works for Zend very well.
What about Symfony2?• Personally I think they’re trying to be “enterpise”  (=complex) as well.• Sensio labs is a commercia...
What’s bad in these “enterprise”               things?• Design-patterns oriented instead of practically  oriented. Emphasi...
That reminds me… Java past• “Their main thesis to support that complexity  is… hold your breath… fasten your seatbelts: if...
Java is simpler now compared to what                 it was• Play• Apache Wicket• Even Spring is much more usable and simp...
So are SF2 and ZF2 evil?
Not really. Just a different niche.
Enterprise isn’t only complexity• Stable API.• Well-tested code.• Backwards-compatible regular releases.• Guarantee that v...
So what’s left for practical fellows?
Practical frameworks• Development should be straightforward.  We’re not doing complex stuff for webapps  most of the time....
If good parts of enterprise are still         there it’s perfect
Yii — a practical framework
Let’s bust some myths first
Framework myths• If framework reinvented the wheel, its a bad  one.• If there is DI container and design patterns all  ove...
What’s really important• Easy to learn.• Easy to debug and fix.• Doesn’t mess with your code or any good third-  party cod...
*              *                 *       *                                          2004       2005   2006   2007       2...
What is Yii?PHP5 MVC.              Powerful cache.Nice API.              RBAC, authDAO, AR, migrations.    framework....
Still stays the fastest modern PHP    framework (excluding somemicroframeworks and PECL ones).
• Thats not ours benchmark.  http://docs.phalconphp.com/en/latest/refere  nce/benchmark/hello-world.html
Getting even faster and less memory-    hungry thanks to our GitHub            community.
*intranet
2   2
1.Balanced2.Stable3.Flexible4.Well-documented5.Doesn’t mess with your stuff
Balance isn’t easy to achieve• Theoretically correct architecture or practical  experience?• 20% or 80%• Features or core?
Stable API and BC = good & evil
Flexibility should not mess with                 simplicity• As less abstraction as possible.• It’s simple to make things ...
There’s not a singlesetMyCoolFactoryDependencyInjection            Container()               in Yii
Docs are very important— We’re documenting as soon as writing code.— Definitive guide and blog tutorial translated into 16...
Yii can work with components from         Symfony 2 and ZF2. Thats what these are for, right? ;)
Yii is practice oriented framework
The end?• Questions?     • sam@rmcreative.ru• Suggestions?   • @sam_dark                 • http://yiiframework.com/
I knew you would ask about it ;)
—PHP 5.3.8+           —Better structured—Namespaced classes   —Less entities—PSR-0                —All the good things are...
Yii2: base— New aliases             class MyComponent extends  @yii/base/Component     yiibaseObject                      ...
Yii2: View Object         —render(), widget(),          beginCache() →          viewObject         —View: $owner = class  ...
Yii2: events$post->on(add,          • No need to declarefunction($event) { ...    • jQuery-like syntax});                 ...
Yii2: Query object// Query object$query = new Query;$query->select(id)->from(tbl_customer)->limit(10);$command = $db->crea...
Yii2: Even better ActiveRecord$customer = Customer::find(2)   – Finder / Model       ->active()               – Can create...
Yii2: AR$postFinder = Post::find()       – Criteria  ->where(array(                 – You can merge finders    active => t...
Yii2: AR                            class Customer extends ActiveRecord {– tableName(),                      const STATUS_...
Yii2: AR$customers =                 $customers =Customer::find()->           Customer::find()->active()asArray()->all(); ...
TODO (if there will be enough time)•   HTTP (CURL) wrapper    • jQueryUI-based widgets•   Package manager          (not ju...
1 or 2?Work with the stable one. 1.1 will be supported till December 31, 2015.
When?Before we’ll push alpha     •   i18ncode to github repo we      •   Controller + webappneed to finish at least →   • ...
The end (really)• Questions?• Suggestions?• sam@rmcreative.ru• @sam_dark• http://yiiframework.com/
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
Upcoming SlideShare
Loading in …5
×

Yii, frameworks and where PHP is heading to

27,845 views

Published on

Talk was given at WebConf Riga 2012. There was some trolling about Symfony 2 and ZF2 just for fun. I actually think these are great projects so sorry if it hury your feelings.

2 Comments
14 Likes
Statistics
Notes
  • Haha, this slide made me laugh a bit. Symfony2 is by far 'the' best framework you could use out there. Yii teaches you VERY and VERY bad practises. It maybe will get the job done, in time, but nothing more. After a time you realise that the things you did in Yii are not reusable, broken and you are afraid to refactor because you couldn't test it right. See this post for some better information: http://stackoverflow.com/questions/10917946/migration-to-yii-framework
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Well done. Did they record your talk?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
27,845
On SlideShare
0
From Embeds
0
Number of Embeds
20,800
Actions
Shares
0
Downloads
168
Comments
2
Likes
14
Embeds 0
No embeds

No notes for slide

Yii, frameworks and where PHP is heading to

  1. 1. Yii, frameworks and where PHP is heading to Alexander Makarov Yii core team, Stay.com
  2. 2. Is PHP still there?• Developers are migrating to – Ruby – Python – Java – C++• Developers are migrating…• Because… PHP sucks?!
  3. 3. Well, it sucks a bit. Not that much!• Very good choice for web development.• Will be there for a long time.• Programming language is just a tool… one of the tools.• With a good framework bad parts aren’t that visible.
  4. 4. PHP is good for business• It’s web-focused.• Lots of ready to use stuff.• PHP makes everything easy.• Easy to find and replace developers.• Less risky.• Project costs less.
  5. 5. Good choice for business → Good choice for developer.
  6. 6. PHP itself is heading towards simplicity and usability• Password hashing API.• Generators.• More consistency.• Built-in webserver.• More performance.• Better syntax.• etc.
  7. 7. And that’s the way to go!
  8. 8. What about frameworks?
  9. 9. Good things first• github = standard for hosting cool PHP stuff.• PSR-0 = interoperable & faster class loading.• At least some stable frameworks are there and definitely ready for business: BC and maintained.
  10. 10. Now not that good things…
  11. 11. “Enterprise”• ZF 2 and Symfony2 are very “enterprise”.• Much more “enterprise” than ZF1 and symfony were.
  12. 12. This “enterprise” shit is too complex
  13. 13. “ZF2 is too "scientific". You can write a thesisabout ZF2 and its design. Dont get me wrong, Ilove best practices, standards, design patternsetc., but ZF2 devs dive too deep into "science".Symfony2 is better but not enough.”
  14. 14. But why becoming complex instead of being simple?
  15. 15. Why ZF2 is what it is• Zend is the PHP company, they’ll have enough customers no matter what they’ll release.• Main customers are of enterprise type.• Not really interested in 80% projects out there.• Consulting isn’t profitable if product isn’t complex enough ;)• Heading into J2EE direction they have a chance to get former EE-companies on board.
  16. 16. It works for Zend very well.
  17. 17. What about Symfony2?• Personally I think they’re trying to be “enterpise” (=complex) as well.• Sensio labs is a commercial company earning for framework support and consulting.• http://fabien.potencier.org/article/65/why- symfony• Good thing is that framework is a bit more practical than ZF2.• Still very complex.
  18. 18. What’s bad in these “enterprise” things?• Design-patterns oriented instead of practically oriented. Emphasizing on patterns.• Easier to unit-test, harder to develop and learn.• Almost impossible to delegate routine work to less competent developers w/o spending lots of time teaching them first.• High risk for project owner.
  19. 19. That reminds me… Java past• “Their main thesis to support that complexity is… hold your breath… fasten your seatbelts: if it were easier, more stupid people would be using it!. Ta-da!!”• “J2EE is no way simple. However the reality is simple: for J2EE to survive - we have to make it simple to build, deploy and manage”
  20. 20. Java is simpler now compared to what it was• Play• Apache Wicket• Even Spring is much more usable and simple than what it was before
  21. 21. So are SF2 and ZF2 evil?
  22. 22. Not really. Just a different niche.
  23. 23. Enterprise isn’t only complexity• Stable API.• Well-tested code.• Backwards-compatible regular releases.• Guarantee that vendor will support product for at least X years.• Well-documented.• Commercial support, trainings.• And more…
  24. 24. So what’s left for practical fellows?
  25. 25. Practical frameworks• Development should be straightforward. We’re not doing complex stuff for webapps most of the time.• Easy learning.• Less magic.• Less configuration.• As simple API as possible.
  26. 26. If good parts of enterprise are still there it’s perfect
  27. 27. Yii — a practical framework
  28. 28. Let’s bust some myths first
  29. 29. Framework myths• If framework reinvented the wheel, its a bad one.• If there is DI container and design patterns all over the place, its a good one.• If framework X implemented feature Y first, its better.• Loosely coupled framework is always a good choice.• If there’s no feature X it’s a bad one.
  30. 30. What’s really important• Easy to learn.• Easy to debug and fix.• Doesn’t mess with your code or any good third- party code.• Friendly active community.• BC and stable.• No roadblocks when trying to extend or customize it.• Feels good ;)
  31. 31. * * * * 2004 2005 2006 2007 2008 2011 Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
  32. 32. What is Yii?PHP5 MVC. Powerful cache.Nice API. RBAC, authDAO, AR, migrations. framework.Form builder. Console.Themes. error handler, log.Test framework. Gii.Well documented. CLDR based I18n.Friendly community. Widgets. BSD license.
  33. 33. Still stays the fastest modern PHP framework (excluding somemicroframeworks and PECL ones).
  34. 34. • Thats not ours benchmark. http://docs.phalconphp.com/en/latest/refere nce/benchmark/hello-world.html
  35. 35. Getting even faster and less memory- hungry thanks to our GitHub community.
  36. 36. *intranet
  37. 37. 2 2
  38. 38. 1.Balanced2.Stable3.Flexible4.Well-documented5.Doesn’t mess with your stuff
  39. 39. Balance isn’t easy to achieve• Theoretically correct architecture or practical experience?• 20% or 80%• Features or core?
  40. 40. Stable API and BC = good & evil
  41. 41. Flexibility should not mess with simplicity• As less abstraction as possible.• It’s simple to make things complex. Making things simple isn’t.• Conventions.• Hide complexity.
  42. 42. There’s not a singlesetMyCoolFactoryDependencyInjection Container() in Yii
  43. 43. Docs are very important— We’re documenting as soon as writing code.— Definitive guide and blog tutorial translated into 16 languages.— phpdoc.— Examples.— Great books.
  44. 44. Yii can work with components from Symfony 2 and ZF2. Thats what these are for, right? ;)
  45. 45. Yii is practice oriented framework
  46. 46. The end?• Questions? • sam@rmcreative.ru• Suggestions? • @sam_dark • http://yiiframework.com/
  47. 47. I knew you would ask about it ;)
  48. 48. —PHP 5.3.8+ —Better structured—Namespaced classes —Less entities—PSR-0 —All the good things are still there v2
  49. 49. Yii2: base— New aliases class MyComponent extends @yii/base/Component yiibaseObject {— CComponent → public $x; Object + Component public function __construct($a, $b)— SPL instead of custom { collections //…— Killed CFormModel. } } Model should be used instead. $component = MyComponent::newInstance(— Better rules and array(x=>10), scenarios. a, b );
  50. 50. Yii2: View Object —render(), widget(), beginCache() → viewObject —View: $owner = class that called render —$this = View. —No need for renderers. —Can be used in console. —CHtml is still there.
  51. 51. Yii2: events$post->on(add, • No need to declarefunction($event) { ... • jQuery-like syntax}); • Behaviors instead of filters$post->trigger(add,new Event($this));$post->off(add,$callback);$handlers = $post->getEventHandlers(add);
  52. 52. Yii2: Query object// Query object$query = new Query;$query->select(id)->from(tbl_customer)->limit(10);$command = $db->createCommand($query);$this->assertEquals("SELECT `id` FROM `tbl_customer`LIMIT 10", $command->sql);// array$command = $db->createCommand(array( select => name, from => tbl_customer,));
  53. 53. Yii2: Even better ActiveRecord$customer = Customer::find(2) – Finder / Model ->active() – Can create your own ->one(); finder$customer->name = Qiang; – ::model()$customer->save(); – Autoquotes.$customers = Customer::find() – Method chains. ->order(id) – Dirty attributes. ->asArray(true) – Less memory. ->all(); – Can get arrays from AR.
  54. 54. Yii2: AR$postFinder = Post::find() – Criteria ->where(array( – You can merge finders active => true – You can add conditions)); on the flyif($isPrivate) { $postFinder->addWhere(array( createdBy => $userId, ));}$posts = $postFinder ->mergeWith($anotherFinder) ->all();
  55. 55. Yii2: AR class Customer extends ActiveRecord {– tableName(), const STATUS_ACTIVE = 1; relations(), scopes() = public static function tableName() { static. return tbl_customer; }– HAS_ONE, public static function relations() { HAS_MANY relations. return array( orders:Order[] => array(– link = FKs link => array(customer_id => id),– via = through ), );– Scopes via } anonymous functions. public static function scopes() { return array(– "@." and "?" tokens. active => function($q) { Automatic alias. Own return $q- >andWhere(@.`status` = . self::STATUS_ACTIVE); table. Foreign table. }, ); } }
  56. 56. Yii2: AR$customers = $customers =Customer::find()-> Customer::find()->active()asArray()->all(); ->all();foreach (Customer::find() $customers =as $customer) Customer::find() ->where(name like :name,$count = Customer::count() array(->value(); :name => %customer% ))->order(id)->all();
  57. 57. TODO (if there will be enough time)• HTTP (CURL) wrapper • jQueryUI-based widgets• Package manager (not just jQueryUI• Mailer widgets)• Twitter Bootstrap • Commercial support (most probably not by• Debug toolbar Yii core team members)• Console requirements• More helpers
  58. 58. 1 or 2?Work with the stable one. 1.1 will be supported till December 31, 2015.
  59. 59. When?Before we’ll push alpha • i18ncode to github repo we • Controller + webappneed to finish at least → • A solid base for widgets • URL manager
  60. 60. The end (really)• Questions?• Suggestions?• sam@rmcreative.ru• @sam_dark• http://yiiframework.com/

×