SlideShare a Scribd company logo
PHP Reset
                         Jordi Boggiano @seldaek
                              http://nelm.io/

Jordi Boggiano                                     Company http://nelm.io
http://twitter.com/seldaek                             Blog http://seld.be
Disclaimer
                             This is not about REST




Jordi Boggiano                                        Company http://nelm.io
http://twitter.com/seldaek                                Blog http://seld.be
About Me
               Belgian living in Zürich
               Weby stuff for 10 years
               http://seld.be
               Symfony2 core dev and other OSS contributions
               http://github.com/Seldaek
               Recently started Nelmio
               http://nelm.io
               We do Symfony2 & Frontend Performance consulting




Jordi Boggiano                                               Company http://nelm.io
http://twitter.com/seldaek                                       Blog http://seld.be
Planning
                       Small Rant
                       New Frameworks & Libraries
                       GitHub Commercial Break
                       Best Practices
                       Composer
                       Wishful Thinking




Jordi Boggiano                                      Company http://nelm.io
http://twitter.com/seldaek                              Blog http://seld.be
A bit of history




Jordi Boggiano                                  Company http://nelm.io
http://twitter.com/seldaek                          Blog http://seld.be
PHP4 - 22-May-2000
               01 class Foo_Bar_Baz
               02 {
               03     var $foo;
               04
               05     function Foo_Bar_Baz()
               06     {
               07     }
               08
               09     function bar()
               10     {
               11     }
               12 }




Jordi Boggiano                                             Company http://nelm.io
http://twitter.com/seldaek                                     Blog http://seld.be
PHP5 - 13-Jul-2004
               01 class Foo_Bar_Baz
               02 {
               03     public $foo;
               04
               05     public function __construct()
               06     {
               07     }
               08
               09     private function bar()
               10     {
               11     }
               12 }




Jordi Boggiano                                              Company http://nelm.io
http://twitter.com/seldaek                                      Blog http://seld.be
Could you spot the differences?




Jordi Boggiano                              Company http://nelm.io
http://twitter.com/seldaek                      Blog http://seld.be
Yet seven years later
                ~20% of servers still run PHP4




                             Source: @iliaa's PHP Advent article, December 2010.




Jordi Boggiano                                                                     Company http://nelm.io
http://twitter.com/seldaek                                                             Blog http://seld.be
PHP5.3 - 30-Jun-2009
               01   namespace FooBar;
               02
               03   class Baz
               04   {
               05       public $foo;
               06
               07            public function __construct()
               08            {
               09            }
               10
               11            private function bar()
               12            {
               13            }
               14   }




Jordi Boggiano                                                     Company http://nelm.io
http://twitter.com/seldaek                                             Blog http://seld.be
Again, not much has changed.
                   But it changes everything.
                             BackslashMeansNoBackwardsCompatibility




Jordi Boggiano                                                            Company http://nelm.io
http://twitter.com/seldaek                                                    Blog http://seld.be
We've been sitting on our asses
                          for too long.
                    It's time for a change.




Jordi Boggiano                              Company http://nelm.io
http://twitter.com/seldaek                      Blog http://seld.be
New Frameworks




Jordi Boggiano                                Company http://nelm.io
http://twitter.com/seldaek                        Blog http://seld.be
Symfony2
                              Lithium
                               Silex
                                ZF2
                                 ...
                                  .


Jordi Boggiano                          Company http://nelm.io
http://twitter.com/seldaek                  Blog http://seld.be
New Libraries




Jordi Boggiano                               Company http://nelm.io
http://twitter.com/seldaek                       Blog http://seld.be
Assetic
               Asset management & processing
                       Combine & Compress JS, CSS
                       Compile CoffeeScript, SASS, LESS, ..
                       Re-encode images
                       All on the fly with cache or pre-processed
                       Inspired by Python's WebAssets
                       Shipped with Symfony2
               http://github.com/kriswallsmith/assetic




Jordi Boggiano                                                Company http://nelm.io
http://twitter.com/seldaek                                        Blog http://seld.be
Doctrine2
               DBAL, ORM, ODMs
                       Document stores (MongoDB, CouchDB,
                       PHPCR, XML)
                       Common interfaces allow for interop and
                       knowledge re-use
                       Propel2 builds on top of it
                       Shipped with Symfony2
               http://github.com/doctrine




Jordi Boggiano                                              Company http://nelm.io
http://twitter.com/seldaek                                      Blog http://seld.be
Monolog
               Logging
                       FingersCrossedHandler for production
                       Log to files, FirePHP, emails, etc.
                       Inspired by Python's Logbook
                       Shipped with Symfony2
               http://github.com/Seldaek/monolog




Jordi Boggiano                                                Company http://nelm.io
http://twitter.com/seldaek                                        Blog http://seld.be
Twig
               Template engine
                       Automatic escaping
                       Separation of concerns
                       (Readability)
                       Inspired by Python's Jinja2
                       Shipped with Symfony2
               http://github.com/fabpot/Twig




Jordi Boggiano                                       Company http://nelm.io
http://twitter.com/seldaek                               Blog http://seld.be
Gaufrette
               Filesystem abstraction
                       Code once, store files anywhere
                       S3, Memory, FTP, Rackspace, ..
                       Transparently cache calls to slow backends
               http://github.com/knplabs/Gaufrette




Jordi Boggiano                                               Company http://nelm.io
http://twitter.com/seldaek                                       Blog http://seld.be
Snappy
               Generates PDF/images from webpages
                       Uses wkhtmltopdf/wkhtmltoimage
                       Good example of a small single-purpose
                       library
               http://github.com/knplabs/snappy




Jordi Boggiano                                              Company http://nelm.io
http://twitter.com/seldaek                                      Blog http://seld.be
Imagine
               Image manipulation
                       API that doesn't suck
                       Supports GD2, Imagick, Gmagick
                       Easily resize, crop, and more
                       Inspired by Python's PIL & others
               http://github.com/avalanche123/Imagine




Jordi Boggiano                                             Company http://nelm.io
http://twitter.com/seldaek                                     Blog http://seld.be
Buzz
               HTTP requests
                       API that doesn't suck
                       Wraps around CURL
               http://github.com/kriswallsmith/Buzz




Jordi Boggiano                                        Company http://nelm.io
http://twitter.com/seldaek                                Blog http://seld.be
Goutte
               Web Crawler
                       Supports CSS3 selectors to extract content
                       Easily follow links, submit forms, etc.
                       Good example of code re-use (Sf2/ZF2
                       components)
               http://github.com/fabpot/Goutte




Jordi Boggiano                                               Company http://nelm.io
http://twitter.com/seldaek                                       Blog http://seld.be
I can't list them all.




Jordi Boggiano                                        Company http://nelm.io
http://twitter.com/seldaek                                Blog http://seld.be
GitHub




Jordi Boggiano                        Company http://nelm.io
http://twitter.com/seldaek                Blog http://seld.be
Git will hurt you
                             Read http://progit.org - it's free.




Jordi Boggiano                                                     Company http://nelm.io
http://twitter.com/seldaek                                             Blog http://seld.be
GitHub is your friend
                       No need to track down a developer's
                       email. Hit fork, create a branch, then send
                       a pull request
                       Push code, get immediate attention and
                       contributors
                       README.mdown in every repository
                       200 Symfony2 contributors, still in beta!




Jordi Boggiano                                                Company http://nelm.io
http://twitter.com/seldaek                                        Blog http://seld.be
Best Practices




Jordi Boggiano                                Company http://nelm.io
http://twitter.com/seldaek                        Blog http://seld.be
MIT License
               Free as in free.




Jordi Boggiano                                  Company http://nelm.io
http://twitter.com/seldaek                          Blog http://seld.be
Autoload with PSR-0
               01   //   One class per file
               02   //   First bit should be a vendor name (your project, company, ..)
               03   //   This should sit in <project>/Nelmio/Bar/Baz.php
               04   //   WATCH THE CASE!
               05
               06   namespace NelmioBar;
               07
               08   class Baz
               09   {
               10   }

               http://tinyurl.com/psr0-standard




Jordi Boggiano                                                                           Company http://nelm.io
http://twitter.com/seldaek                                                                   Blog http://seld.be
PEAR-style Coding Standards
               01   namespace FooBar;
               02
               03   class Baz
               04   {
               05       public $foo;
               06
               07            public function __construct()
               08            {
               09                $stuff = array('Coding Style');
               10                if (true) {
               11                    foreach ($stuff as $blob) {
               12                        echo "happy $blob!";
               13                    }
               14                } else {
               15                    echo "dead kittens";
               16                }
               17            }
               18   }

               http://pear.php.net/manual/en/standards.php



Jordi Boggiano                                                     Company http://nelm.io
http://twitter.com/seldaek                                             Blog http://seld.be
Remember, kids, standards
                               are NOT about taste




Jordi Boggiano                                           Company http://nelm.io
http://twitter.com/seldaek                                   Blog http://seld.be
Testing
                       Tests are always good, but for libraries
                       they're a must.
                       Typing phpunit in <project>/ is all I want
                       to know.




Jordi Boggiano                                                Company http://nelm.io
http://twitter.com/seldaek                                        Blog http://seld.be
Composer




Jordi Boggiano                          Company http://nelm.io
http://twitter.com/seldaek                  Blog http://seld.be
Package Management for PHP
                       Mostly inspired by npm and bundler
                       Advanced dependency resolving
                       Install project dependencies locally




Jordi Boggiano                                                Company http://nelm.io
http://twitter.com/seldaek                                        Blog http://seld.be
Compose great things with small libraries
                       Rely on proven code to do common tasks
                       Simplify old APIs (e.g. Imagine, Buzz)




Jordi Boggiano                                                 Company http://nelm.io
http://twitter.com/seldaek                                         Blog http://seld.be
composer.json (lib)
               01 {
               02            "name": "Monolog",
               03            "description": "Logging for PHP 5.3",
               04            "keywords": ["log","logging"],
               05            "homepage": "http://github.com/Seldaek/monolog",
               06            "version": "1.0.0",
               07            "license": "MIT",
               08            "authors": [
               09                {
               10                    "name": "Jordi Boggiano",
               11                    "email": "j.boggiano@seld.be",
               12                    "homepage": "http://seld.be"
               13                }
               14            ],
               15            "require": {
               16                "php": ">=5.3.0"
               17            }
               18 }




Jordi Boggiano                                                                  Company http://nelm.io
http://twitter.com/seldaek                                                          Blog http://seld.be
composer.json (project)
               01 {
               02            "repositories": {
               03                "AwesomeLib": {
               04                    "git": "git://github.com/Jim/AwesomeLib.git"
               05                },
               06                "GreatLib": {
               07                    "git-bare": {
               08                        "url": "git://github.com/Bob/GreatLib.git",
               09                        "version": "1.0.0"
               10                    }
               11                }
               12            },
               13            "require": {
               14                "Twig": ">=1.0.0",
               15                "AwesomeLib": "latest",
               16                "GreatLib": "1.0.0",
               17                "Monolog": "latest"
               18            }
               19 }




Jordi Boggiano                                                                         Company http://nelm.io
http://twitter.com/seldaek                                                                 Blog http://seld.be
Demo, kind of.
                             (blame @naderman :)




Jordi Boggiano                                     Company http://nelm.io
http://twitter.com/seldaek                             Blog http://seld.be
Fear code re-use no more.




Jordi Boggiano                                       Company http://nelm.io
http://twitter.com/seldaek                               Blog http://seld.be
Last words




Jordi Boggiano                            Company http://nelm.io
http://twitter.com/seldaek                    Blog http://seld.be
Namespace adoption, in effect,
                     opens up a world of
                        possibilities.




Jordi Boggiano                               Company http://nelm.io
http://twitter.com/seldaek                       Blog http://seld.be
Open up your mind,
                              we're not alone.




Jordi Boggiano                                    Company http://nelm.io
http://twitter.com/seldaek                            Blog http://seld.be
Share your code
                             and collaborate.




Jordi Boggiano                                  Company http://nelm.io
http://twitter.com/seldaek                          Blog http://seld.be
Thank you.




Jordi Boggiano                            Company http://nelm.io
http://twitter.com/seldaek                    Blog http://seld.be
Feedback please on:
                         http://joind.in/3489
                                Slides:
                         http://slides.seld.be
                             Contact me:
                       @seldaek || jordi@nelm.io


Jordi Boggiano                                 Company http://nelm.io
http://twitter.com/seldaek                         Blog http://seld.be

More Related Content

PDF
Redis - Your Advanced In-Memory Key-Value Store
PDF
PHP Reset
PPTX
PDF
international PHP2011_Bastian Feder_jQuery's Secrets
PDF
international PHP2011_Bastian Hofmann_Mashing up java script
PDF
webinale2011_Dirk Jesse:Responsive Web Design oder "Unwissenheit ist ein Segen"
PDF
international PHP2011_ilia alshanetsky_Hidden Features of PHP
PDF
international PHP2011_Kore Nordmann_Designing multilingual applications
Redis - Your Advanced In-Memory Key-Value Store
PHP Reset
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Hofmann_Mashing up java script
webinale2011_Dirk Jesse:Responsive Web Design oder "Unwissenheit ist ein Segen"
international PHP2011_ilia alshanetsky_Hidden Features of PHP
international PHP2011_Kore Nordmann_Designing multilingual applications

Similar to international PHP2011_Jordi Boggiano_PHP Reset (20)

PDF
Dependency Management with Composer
PPTX
Webdevcon Keynote hh-2012-09-18
PDF
Alexander Sergeev presentation
PPT
Joomla as a mobile App backend - ideas, examples and experiences
PDF
An Introduction to Sencha Touch
PDF
Javascript Web Applications Otx Alex Maccaw
PDF
Seaside - The Revenge of Smalltalk
PDF
(Ebook) Practical Web Development by kan
PDF
Asynchronous programming patterns in Perl
PPTX
Building A Platform From Open Source At Yahoo
PDF
Introducing Ext JS 4
PDF
Practical Web Development 1st Edition Wellens Paul 2024 scribd download
PDF
Curriculum Vitae - Bexandy Rodríguez
PDF
Next Generation Web Development Techniques with Cloud Foundry
PDF
ElggCamp Santiago> For Developers!
PDF
ElggCamp Santiago - Dev Edition
PDF
An Introduction to the Laravel Framework (AFUP Forum PHP 2014)
PDF
(Ebook) Practical Web Development by kan
PDF
Practical Web Development 1st Edition Wellens Paul
ODP
Chisimba - introduction to practical demo
Dependency Management with Composer
Webdevcon Keynote hh-2012-09-18
Alexander Sergeev presentation
Joomla as a mobile App backend - ideas, examples and experiences
An Introduction to Sencha Touch
Javascript Web Applications Otx Alex Maccaw
Seaside - The Revenge of Smalltalk
(Ebook) Practical Web Development by kan
Asynchronous programming patterns in Perl
Building A Platform From Open Source At Yahoo
Introducing Ext JS 4
Practical Web Development 1st Edition Wellens Paul 2024 scribd download
Curriculum Vitae - Bexandy Rodríguez
Next Generation Web Development Techniques with Cloud Foundry
ElggCamp Santiago> For Developers!
ElggCamp Santiago - Dev Edition
An Introduction to the Laravel Framework (AFUP Forum PHP 2014)
(Ebook) Practical Web Development by kan
Practical Web Development 1st Edition Wellens Paul
Chisimba - introduction to practical demo
Ad

More from smueller_sandsmedia (8)

PDF
webinale2011_Kai Radusch_Landingpage-Optimierung für Adwords-Kampagnen
PDF
webinale 2011_Gabriel Yoran_Der Schlüssel zum erfolg: Besser aussehen, als ma...
PDF
international PHP2011_Henning Wolf_ Mit Retrospektivenzu erfolgreichen Projekten
PDF
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
PDF
international PHP2011_Kore Nordmann_Tobias Schlitt_Modular Application Archit...
PDF
webinale2011_Chris Mills_Brave new world of HTML5Html5
PDF
international PHP2011_J.Hartmann_DevOps für PHP
PDF
webinale2011_Daniel Höpfner_Förderprogramme für dummies
webinale2011_Kai Radusch_Landingpage-Optimierung für Adwords-Kampagnen
webinale 2011_Gabriel Yoran_Der Schlüssel zum erfolg: Besser aussehen, als ma...
international PHP2011_Henning Wolf_ Mit Retrospektivenzu erfolgreichen Projekten
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
international PHP2011_Kore Nordmann_Tobias Schlitt_Modular Application Archit...
webinale2011_Chris Mills_Brave new world of HTML5Html5
international PHP2011_J.Hartmann_DevOps für PHP
webinale2011_Daniel Höpfner_Förderprogramme für dummies
Ad

Recently uploaded (20)

PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Chapter 5: Probability Theory and Statistics
PDF
project resource management chapter-09.pdf
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
A Presentation on Touch Screen Technology
PDF
Encapsulation theory and applications.pdf
PDF
WOOl fibre morphology and structure.pdf for textiles
PPTX
1. Introduction to Computer Programming.pptx
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A novel scalable deep ensemble learning framework for big data classification...
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
Programs and apps: productivity, graphics, security and other tools
Chapter 5: Probability Theory and Statistics
project resource management chapter-09.pdf
Enhancing emotion recognition model for a student engagement use case through...
NewMind AI Weekly Chronicles - August'25-Week II
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
A comparative study of natural language inference in Swahili using monolingua...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
cloud_computing_Infrastucture_as_cloud_p
Unlocking AI with Model Context Protocol (MCP)
A Presentation on Touch Screen Technology
Encapsulation theory and applications.pdf
WOOl fibre morphology and structure.pdf for textiles
1. Introduction to Computer Programming.pptx
Zenith AI: Advanced Artificial Intelligence
Agricultural_Statistics_at_a_Glance_2022_0.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A novel scalable deep ensemble learning framework for big data classification...

international PHP2011_Jordi Boggiano_PHP Reset

  • 1. PHP Reset Jordi Boggiano @seldaek http://nelm.io/ Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 2. Disclaimer This is not about REST Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 3. About Me Belgian living in Zürich Weby stuff for 10 years http://seld.be Symfony2 core dev and other OSS contributions http://github.com/Seldaek Recently started Nelmio http://nelm.io We do Symfony2 & Frontend Performance consulting Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 4. Planning Small Rant New Frameworks & Libraries GitHub Commercial Break Best Practices Composer Wishful Thinking Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 5. A bit of history Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 6. PHP4 - 22-May-2000 01 class Foo_Bar_Baz 02 { 03 var $foo; 04 05 function Foo_Bar_Baz() 06 { 07 } 08 09 function bar() 10 { 11 } 12 } Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 7. PHP5 - 13-Jul-2004 01 class Foo_Bar_Baz 02 { 03 public $foo; 04 05 public function __construct() 06 { 07 } 08 09 private function bar() 10 { 11 } 12 } Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 8. Could you spot the differences? Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 9. Yet seven years later ~20% of servers still run PHP4 Source: @iliaa's PHP Advent article, December 2010. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 10. PHP5.3 - 30-Jun-2009 01 namespace FooBar; 02 03 class Baz 04 { 05 public $foo; 06 07 public function __construct() 08 { 09 } 10 11 private function bar() 12 { 13 } 14 } Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 11. Again, not much has changed. But it changes everything. BackslashMeansNoBackwardsCompatibility Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 12. We've been sitting on our asses for too long. It's time for a change. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 13. New Frameworks Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 14. Symfony2 Lithium Silex ZF2 ... . Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 15. New Libraries Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 16. Assetic Asset management & processing Combine & Compress JS, CSS Compile CoffeeScript, SASS, LESS, .. Re-encode images All on the fly with cache or pre-processed Inspired by Python's WebAssets Shipped with Symfony2 http://github.com/kriswallsmith/assetic Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 17. Doctrine2 DBAL, ORM, ODMs Document stores (MongoDB, CouchDB, PHPCR, XML) Common interfaces allow for interop and knowledge re-use Propel2 builds on top of it Shipped with Symfony2 http://github.com/doctrine Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 18. Monolog Logging FingersCrossedHandler for production Log to files, FirePHP, emails, etc. Inspired by Python's Logbook Shipped with Symfony2 http://github.com/Seldaek/monolog Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 19. Twig Template engine Automatic escaping Separation of concerns (Readability) Inspired by Python's Jinja2 Shipped with Symfony2 http://github.com/fabpot/Twig Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 20. Gaufrette Filesystem abstraction Code once, store files anywhere S3, Memory, FTP, Rackspace, .. Transparently cache calls to slow backends http://github.com/knplabs/Gaufrette Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 21. Snappy Generates PDF/images from webpages Uses wkhtmltopdf/wkhtmltoimage Good example of a small single-purpose library http://github.com/knplabs/snappy Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 22. Imagine Image manipulation API that doesn't suck Supports GD2, Imagick, Gmagick Easily resize, crop, and more Inspired by Python's PIL & others http://github.com/avalanche123/Imagine Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 23. Buzz HTTP requests API that doesn't suck Wraps around CURL http://github.com/kriswallsmith/Buzz Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 24. Goutte Web Crawler Supports CSS3 selectors to extract content Easily follow links, submit forms, etc. Good example of code re-use (Sf2/ZF2 components) http://github.com/fabpot/Goutte Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 25. I can't list them all. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 26. GitHub Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 27. Git will hurt you Read http://progit.org - it's free. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 28. GitHub is your friend No need to track down a developer's email. Hit fork, create a branch, then send a pull request Push code, get immediate attention and contributors README.mdown in every repository 200 Symfony2 contributors, still in beta! Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 29. Best Practices Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 30. MIT License Free as in free. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 31. Autoload with PSR-0 01 // One class per file 02 // First bit should be a vendor name (your project, company, ..) 03 // This should sit in <project>/Nelmio/Bar/Baz.php 04 // WATCH THE CASE! 05 06 namespace NelmioBar; 07 08 class Baz 09 { 10 } http://tinyurl.com/psr0-standard Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 32. PEAR-style Coding Standards 01 namespace FooBar; 02 03 class Baz 04 { 05 public $foo; 06 07 public function __construct() 08 { 09 $stuff = array('Coding Style'); 10 if (true) { 11 foreach ($stuff as $blob) { 12 echo "happy $blob!"; 13 } 14 } else { 15 echo "dead kittens"; 16 } 17 } 18 } http://pear.php.net/manual/en/standards.php Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 33. Remember, kids, standards are NOT about taste Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 34. Testing Tests are always good, but for libraries they're a must. Typing phpunit in <project>/ is all I want to know. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 35. Composer Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 36. Package Management for PHP Mostly inspired by npm and bundler Advanced dependency resolving Install project dependencies locally Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 37. Compose great things with small libraries Rely on proven code to do common tasks Simplify old APIs (e.g. Imagine, Buzz) Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 38. composer.json (lib) 01 { 02 "name": "Monolog", 03 "description": "Logging for PHP 5.3", 04 "keywords": ["log","logging"], 05 "homepage": "http://github.com/Seldaek/monolog", 06 "version": "1.0.0", 07 "license": "MIT", 08 "authors": [ 09 { 10 "name": "Jordi Boggiano", 11 "email": "j.boggiano@seld.be", 12 "homepage": "http://seld.be" 13 } 14 ], 15 "require": { 16 "php": ">=5.3.0" 17 } 18 } Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 39. composer.json (project) 01 { 02 "repositories": { 03 "AwesomeLib": { 04 "git": "git://github.com/Jim/AwesomeLib.git" 05 }, 06 "GreatLib": { 07 "git-bare": { 08 "url": "git://github.com/Bob/GreatLib.git", 09 "version": "1.0.0" 10 } 11 } 12 }, 13 "require": { 14 "Twig": ">=1.0.0", 15 "AwesomeLib": "latest", 16 "GreatLib": "1.0.0", 17 "Monolog": "latest" 18 } 19 } Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 40. Demo, kind of. (blame @naderman :) Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 41. Fear code re-use no more. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 42. Last words Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 43. Namespace adoption, in effect, opens up a world of possibilities. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 44. Open up your mind, we're not alone. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 45. Share your code and collaborate. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 46. Thank you. Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be
  • 47. Feedback please on: http://joind.in/3489 Slides: http://slides.seld.be Contact me: @seldaek || jordi@nelm.io Jordi Boggiano Company http://nelm.io http://twitter.com/seldaek Blog http://seld.be