SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
PHP Doesn't Suck
Who are you?


                     John Hobbs

                     - Developer at What Cheer
                     - @jmhobbs
                     - https://github.com/jmhobbs
                     - http://velvetcache.org/




PHP Doesn't Suck
PHP Sucks

                   T_PAAMAYIM_NEKUDOTAYIM

                     get_class() => gettype()

       PHPE9568F34-D428-11d2-A769-00AA001ACF42

                         sort( &$array )


                        www.phpsadness.com
PHP Doesn't Suck
PHP Sucks

                                             Low Barrier To Entry
                                              Weak Community
                                              Google-Copy-Paste
                                                    NIH

      “In the end I think you will find that your homegrown
      small framework has saved you time and aggravation
      and you end up with a better product.” - Rasmus

             http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

PHP Doesn't Suck
I can write
                   terrible code in
                    any language.
                                - Me

PHP Doesn't Suck
Making It Not Suck

                   Learn the Language




                    http://php.net/manual


PHP Doesn't Suck
Making It Not Suck

                        Test Your Code




                      http://www.simpletest.org/
                        http://www.phpunit.de/
                   http://qa.php.net/write-test.php


PHP Doesn't Suck
Making It Not Suck

                       NO LIVE EDITS
                             (mostly)




               CAPISTRANO WORKS FINE WITH PHP

PHP Doesn't Suck
Making It Not Suck
                      Share & Be shared




                                  Github
                   PSR-0 (http://tinyurl.com/yh6jydd)

PHP Doesn't Suck
Making It Not Suck
                         Have A Style




        http://www.mediawiki.org/wiki/Manual:Coding_conventions

PHP Doesn't Suck
Making It Not Suck
                          Try The REPL
          jmhobbs@Cordelia:~$ phpsh
          Starting php
          type 'h' or 'help' to see instructions & features
          php> echo "Oh hai!";
          Oh hai!
          php> include "test.php";

          php> whoa();
          lol, functions!1!
          php>
          jmhobbs@Cordelia:~$


                       http://www.phpsh.org/

PHP Doesn't Suck
Making It Not Suck
                         Read Code
                      (Including other languages!)




PHP Doesn't Suck
USE
        A
   FRAMEWORK
                   (Hint: Not Zend)
PHP Doesn't Suck
Use A Framework


                    - HMVC
                    - Useful helpers
                    - Super flexible
                    - Great modules system
                    - Great modules


                    http://kohanaframework.org/
PHP Doesn't Suck
Use A Framework



         namespace appcontrollers;

         class PostsController extends lithiumactionController {

              public function index() {
                  return array('foo' => 'bar', 'title' => 'Posts');
              }
         }



                                 http://lithify.me/
PHP Doesn't Suck
Use A Framework
                                    Skunk
         // Initialize
         $s = new Skunk();

         // Add a route
         $s->get(
            '/hi(/<name>)',
            function ( &$s, $name = “world” ) {
              $s->body = “Hello $name!";
            }
         );

         // Run it!
         $s->run();


                        https://github.com/jmhobbs/Skunk
PHP Doesn't Suck
So...
PHP Doesn't Suck
It's Getting Better
    5.4

      - http://www.php.net/manual/en/language.oop5.traits.php
        (Traits => Mixins)

      - http://svn.php.net/viewvc?view=revision&revision=313641
        (Short Array Syntax: [ “a” => “b” ])

      - http://news.php.net/php.internals/55293
        (SVN => git)



PHP Doesn't Suck
Discussion


                   Questions?
                   Comments?

PHP Doesn't Suck
PHP Doesn't Suck




This is a presentation about PHP.

If you are looking for a fight, leave now.
Who are you?


                           John Hobbs

                           - Developer at What Cheer
                           - @jmhobbs
                           - https://github.com/jmhobbs
                           - http://velvetcache.org/




      PHP Doesn't Suck



I'm John Hobbs.

I make fancy websites at What Cheer.

I have a twitter and a github and I blog but no one
   reads it.

If I'm known for anything on the Internet it's Beef Taco.

Just google Beef Taco and it's the top item.

I kid you not.
PHP Sucks

                        T_PAAMAYIM_NEKUDOTAYIM

                          get_class() => gettype()

            PHPE9568F34-D428-11d2-A769-00AA001ACF42

                              sort( &$array )


                             www.phpsadness.com
     PHP Doesn't Suck



PHP Sucks.

The language itself has some fundamental flaws that
 crept in early in it's life and have not been excised
 yet, mostly for compatibility issues.

Crappy error messages.
Inconsistent naming conventions.
Stupid “features”
In place array sorts.

There is a decent chunk of these, phpsadness.com is
 a good place to read and track them.

PHP has a weird history of full rewrites, but it's held
 onto backwards compatibility through a lot of them.

Zend (4/5) is a decent engine, but the old cruft is lame.
PHP Sucks

                                                   Low Barrier To Entry
                                                    Weak Community
                                                    Google-Copy-Paste
                                                          NIH

            “In the end I think you will find that your homegrown
            small framework has saved you time and aggravation
            and you end up with a better product.” - Rasmus

                   http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

      PHP Doesn't Suck



Why else does PHP suck?

Well, it runs everywhere. It's billed as an easy
 language to learn, fast. And it is, if you want to write
 crappy code.

The community is, compared to Python and Ruby,
 fragmented and not sophisticated. Testing is a big
 problem here. Ever used a phpt?

Because PHP is everywhere, you can Google for
 anything and get some code. Too often people don't
 read it, they just copy-paste. So they lose a chance
 to learn and also integrate crappy code.

There also seems to be a serious not-invented-here
 syndrome in PHP. This includes Rasmus. Don't
 listen to Rasmus.
I can write
                         terrible code in
                          any language.
                                       - Me

      PHP Doesn't Suck



I can write terrible code in any language.

The point is that the quality of the code has a lot to do
 with who is writing it, and how much they
 understand.

Don't blame everything on the language.

So how can we write better PHP?
Making It Not Suck

                         Learn the Language




                          http://php.net/manual


      PHP Doesn't Suck



Learn the language.

It sounds simple, but I bet there is lots of stuff that even
   good PHP programmers don't know about PHP.

Has anyone here ever written a __clone method?

How much of the manual have you read?

Have you ever compiled an extension? Written one?
Making It Not Suck

                             Test Your Code




                           http://www.simpletest.org/
                             http://www.phpunit.de/
                        http://qa.php.net/write-test.php


     PHP Doesn't Suck



Test your code.

This is a huuuuge deal. There are good testing tools
 for PHP, use them. I like SimpleTest, but it's a
 personal choice, and an easy one.

TDD makes you think, something PHP doesn't always
 make you do.

Something else that unit testing does is force you to
 separate code. PHP is it's own template language,
 so it's super easy to mix business logic with
 presentation. Don't. Testing will help.
Making It Not Suck

                                 NO LIVE EDITS
                                       (mostly)




                         CAPISTRANO WORKS FINE WITH PHP

      PHP Doesn't Suck



No live edits. Stay off of production.

I admit, I don't use version control on some stuff. One
   off tools and pages, wordpress blogs, stuff that
   doesn't really matter.

If you are writing an app or a library, you should be
   using version control and running deployments after
   all your tests pass.

Capistrano gets along fine with PHP, and if you would
 rather you can use phing and other tools.

PHP tempts you to edit live in production. Resist.
Making It Not Suck
                            Share & Be shared




                                        Github
                         PSR-0 (http://tinyurl.com/yh6jydd)

      PHP Doesn't Suck



Share your code, and use shared code.

You don't have to come up with your own version of a
 lot of things.

But don't just blindly copy code or use any old module.

Look at the code and make a judgment call. It's okay
  to fork or rewrite if it's in bad shape, but then share it
  back to the community!

If you are writing a library, be compatible. If it's
   generic, there are naming conventions like PSR-0.

(I admit I am bad at being compatible)
Making It Not Suck
                               Have A Style




              http://www.mediawiki.org/wiki/Manual:Coding_conventions

      PHP Doesn't Suck



Have a style you stick to.

Being clear and consistent in your code is essential, no
 sloppy formatting.

Bad style is endemic of google-copy-paste code.

If you are working on someone else's project, use their
    style before you make a pull request.

It's polite, it's clean it's essential.

I use a variant of MediaWiki's conventions.
Making It Not Suck
                                Try The REPL
                jmhobbs@Cordelia:~$ phpsh
                Starting php
                type 'h' or 'help' to see instructions & features
                php> echo "Oh hai!";
                Oh hai!
                php> include "test.php";

                php> whoa();
                lol, functions!1!
                php>
                jmhobbs@Cordelia:~$


                             http://www.phpsh.org/

      PHP Doesn't Suck



Other languages have a great REPL.

PHP, not so much.

Luckily we have a good one from Facebook, written
  mostly in Python actually.

Get it and give it a shot.

When you forget argument ordering it's often easier to
 try it in the shell than to go look it up on php.net.
Making It Not Suck
                              Read Code
                           (Including other languages!)




     PHP Doesn't Suck



Actually READ the code you use.

This one is a big one. Read other people's code, the
 good and the bad.

Identify what you like and what you don't like about
  other people's code.

Try out new things you find in other peoples code.

And don't be just a PHP programmer.

Read and write some other languages, Python, Ruby,
 whatever.

I am convinced the more well read you are, in any
   language, the better you will be as a programmer.
USE
             A
        FRAMEWORK
                        (Hint: Not Zend)
     PHP Doesn't Suck



Use a framework.

A framework will make you organize your code within a
  set of conventions. Which conventions don't matter
  as much as the fact that they exist.

I recommend not Zend because it frightens me.

Learn your framework well.

Read it's core, submit patches, be involved.

Here are few examples of frameworks:
Use A Framework


                          - HMVC
                          - Useful helpers
                          - Super flexible
                          - Great modules system
                          - Great modules


                          http://kohanaframework.org/
      PHP Doesn't Suck



I'm a Kohana user.

It's not all roses though, there are no migrations either,
   which is gross.

Development moves fast, and breaks api a lot. It's
 managed with versioning though, and there is plenty
 of backporting and bug fixes.
Use A Framework



              namespace appcontrollers;

              class PostsController extends lithiumactionController {

                   public function index() {
                       return array('foo' => 'bar', 'title' => 'Posts');
                   }
              }



                                      http://lithify.me/
     PHP Doesn't Suck



Another cool one is Lithium.

It's very “leading edge” and uses namespaces like they
   are going out of style.
Use A Framework
                                         Skunk
              // Initialize
              $s = new Skunk();

              // Add a route
              $s->get(
                 '/hi(/<name>)',
                 function ( &$s, $name = “world” ) {
                   $s->body = “Hello $name!";
                 }
              );

              // Run it!
              $s->run();


                             https://github.com/jmhobbs/Skunk
     PHP Doesn't Suck



Finally I included a Sinatra and Bottle style framework
  that I wrote.

I wouldn't necessarily recommend using Skunk, but it's
  a good example a little, single file framework with an
  interesting API and feel.
So...
      PHP Doesn't Suck



So.

Those are my thoughts on how to write better PHP.

As for the language itself...
It's Getting Better
          5.4

            - http://www.php.net/manual/en/language.oop5.traits.php
              (Traits => Mixins)

            - http://svn.php.net/viewvc?view=revision&revision=313641
              (Short Array Syntax: [ “a” => “b” ])

            - http://news.php.net/php.internals/55293
              (SVN => git)



      PHP Doesn't Suck



It's getting better.

5.4 is on it's way and it's bringing some fixes for major
  pain points.
Discussion


                        Questions?
                        Comments?

     PHP Doesn't Suck



Please be gentle.

Contenu connexe

Tendances

My little pony
My little ponyMy little pony
My little ponyEverlight
 
Ppt karaoke game
Ppt karaoke gamePpt karaoke game
Ppt karaoke gameTEss30
 
Open Government Is Like Poetry
Open Government Is Like PoetryOpen Government Is Like Poetry
Open Government Is Like PoetryJoshua Tauberer
 
Power Point Karaoke Slides - Love Relationships
Power Point Karaoke Slides - Love RelationshipsPower Point Karaoke Slides - Love Relationships
Power Point Karaoke Slides - Love Relationshipspampf
 
Epic 2 ppts
Epic 2 pptsEpic 2 ppts
Epic 2 pptsTEss30
 
PowerPoint Karaoke Slides from DrupalCorn 2014
PowerPoint Karaoke Slides from DrupalCorn 2014PowerPoint Karaoke Slides from DrupalCorn 2014
PowerPoint Karaoke Slides from DrupalCorn 2014Rob Green
 
Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Luz Bratcher
 
Grindcore (Powerpoint-Karaoke)
Grindcore (Powerpoint-Karaoke)Grindcore (Powerpoint-Karaoke)
Grindcore (Powerpoint-Karaoke)digezz
 
Power Point Karaoke for 6
Power Point Karaoke for 6Power Point Karaoke for 6
Power Point Karaoke for 6Amber Case
 
10 steps to your career makeover
10 steps to your career makeover10 steps to your career makeover
10 steps to your career makeoverGetSmarter
 
The perfect innovation toolkit for $100 per month
The perfect innovation toolkit for $100 per monthThe perfect innovation toolkit for $100 per month
The perfect innovation toolkit for $100 per monthBoard of Innovation
 
11 Things Healthy People Do Every Morning
11 Things Healthy People Do Every Morning11 Things Healthy People Do Every Morning
11 Things Healthy People Do Every MorningEason Chan
 
Open Source Creativity
Open Source CreativityOpen Source Creativity
Open Source CreativitySara Cannon
 
How to Cook Up an Awesome Deck
How to Cook Up an Awesome DeckHow to Cook Up an Awesome Deck
How to Cook Up an Awesome DeckSemrush
 
Timeless Marketing Wisdom From David Ogilvy
Timeless Marketing Wisdom From David OgilvyTimeless Marketing Wisdom From David Ogilvy
Timeless Marketing Wisdom From David OgilvyHubSpot
 
Zombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesikZombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesikEric Pesik
 
LKCE19 Klaus Leopold - Flight Levels in Action
LKCE19 Klaus Leopold - Flight Levels in ActionLKCE19 Klaus Leopold - Flight Levels in Action
LKCE19 Klaus Leopold - Flight Levels in ActionLean Kanban Central Europe
 

Tendances (20)

My little pony
My little ponyMy little pony
My little pony
 
Ppt karaoke game
Ppt karaoke gamePpt karaoke game
Ppt karaoke game
 
Open Government Is Like Poetry
Open Government Is Like PoetryOpen Government Is Like Poetry
Open Government Is Like Poetry
 
Power Point Karaoke Slides - Love Relationships
Power Point Karaoke Slides - Love RelationshipsPower Point Karaoke Slides - Love Relationships
Power Point Karaoke Slides - Love Relationships
 
Epic 2 ppts
Epic 2 pptsEpic 2 ppts
Epic 2 ppts
 
PowerPoint Karaoke Slides from DrupalCorn 2014
PowerPoint Karaoke Slides from DrupalCorn 2014PowerPoint Karaoke Slides from DrupalCorn 2014
PowerPoint Karaoke Slides from DrupalCorn 2014
 
Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!
 
Grindcore (Powerpoint-Karaoke)
Grindcore (Powerpoint-Karaoke)Grindcore (Powerpoint-Karaoke)
Grindcore (Powerpoint-Karaoke)
 
Powerpoint Karaoke, Maputo 2015
Powerpoint Karaoke, Maputo 2015Powerpoint Karaoke, Maputo 2015
Powerpoint Karaoke, Maputo 2015
 
PowerPoint Karaoke
PowerPoint KaraokePowerPoint Karaoke
PowerPoint Karaoke
 
Power Point Karaoke for 6
Power Point Karaoke for 6Power Point Karaoke for 6
Power Point Karaoke for 6
 
10 steps to your career makeover
10 steps to your career makeover10 steps to your career makeover
10 steps to your career makeover
 
The perfect innovation toolkit for $100 per month
The perfect innovation toolkit for $100 per monthThe perfect innovation toolkit for $100 per month
The perfect innovation toolkit for $100 per month
 
11 Things Healthy People Do Every Morning
11 Things Healthy People Do Every Morning11 Things Healthy People Do Every Morning
11 Things Healthy People Do Every Morning
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Open Source Creativity
Open Source CreativityOpen Source Creativity
Open Source Creativity
 
How to Cook Up an Awesome Deck
How to Cook Up an Awesome DeckHow to Cook Up an Awesome Deck
How to Cook Up an Awesome Deck
 
Timeless Marketing Wisdom From David Ogilvy
Timeless Marketing Wisdom From David OgilvyTimeless Marketing Wisdom From David Ogilvy
Timeless Marketing Wisdom From David Ogilvy
 
Zombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesikZombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesik
 
LKCE19 Klaus Leopold - Flight Levels in Action
LKCE19 Klaus Leopold - Flight Levels in ActionLKCE19 Klaus Leopold - Flight Levels in Action
LKCE19 Klaus Leopold - Flight Levels in Action
 

En vedette

Unit testing in PHP
Unit testing in PHPUnit testing in PHP
Unit testing in PHPLee Boynton
 
Erin elchesyn the digestive system
Erin elchesyn the digestive systemErin elchesyn the digestive system
Erin elchesyn the digestive systemMrs Seo
 
Essentials of corr med presentation -understanding the legal enviroment in co...
Essentials of corr med presentation -understanding the legal enviroment in co...Essentials of corr med presentation -understanding the legal enviroment in co...
Essentials of corr med presentation -understanding the legal enviroment in co...Zoey Lovell
 
Jack murrell wright digestive system
Jack murrell wright digestive systemJack murrell wright digestive system
Jack murrell wright digestive systemMrs Seo
 
SharingEconomy: The Buzzword of the Moment
SharingEconomy: The Buzzword of the MomentSharingEconomy: The Buzzword of the Moment
SharingEconomy: The Buzzword of the MomentSimone Cicero
 
The secret order of the illuminati
The secret order of the illuminatiThe secret order of the illuminati
The secret order of the illuminatiRiaz Zalil
 
ppt on Industrial policy
ppt on Industrial policyppt on Industrial policy
ppt on Industrial policyCodelaxy Ltd.
 
A Generic Apple "Steve Jobs" style Keynote Address Presentation
A Generic Apple "Steve Jobs" style Keynote Address PresentationA Generic Apple "Steve Jobs" style Keynote Address Presentation
A Generic Apple "Steve Jobs" style Keynote Address PresentationThe App Store Chronicle
 
Illuminati presentation
Illuminati presentationIlluminati presentation
Illuminati presentation04burkem
 
Buzzword Bingo 2017
Buzzword Bingo 2017Buzzword Bingo 2017
Buzzword Bingo 2017ron mader
 
How to think like a startup v3
How to think like a startup v3How to think like a startup v3
How to think like a startup v3Loic Le Meur
 
Industrial policy.ppt
Industrial policy.pptIndustrial policy.ppt
Industrial policy.pptShikha Gupta
 
Steve Jobs Inspirational Quotes
Steve Jobs Inspirational QuotesSteve Jobs Inspirational Quotes
Steve Jobs Inspirational QuotesInsideView
 
Shall we play a game?
Shall we play a game?Shall we play a game?
Shall we play a game?Maciej Lasyk
 
The Future of Everything
The Future of EverythingThe Future of Everything
The Future of EverythingCharbel Zeaiter
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging ChallengesAaron Irizarry
 

En vedette (20)

Unit testing in PHP
Unit testing in PHPUnit testing in PHP
Unit testing in PHP
 
Random powerpoint
Random powerpointRandom powerpoint
Random powerpoint
 
Erin elchesyn the digestive system
Erin elchesyn the digestive systemErin elchesyn the digestive system
Erin elchesyn the digestive system
 
Wwe john cena
Wwe john cenaWwe john cena
Wwe john cena
 
Essentials of corr med presentation -understanding the legal enviroment in co...
Essentials of corr med presentation -understanding the legal enviroment in co...Essentials of corr med presentation -understanding the legal enviroment in co...
Essentials of corr med presentation -understanding the legal enviroment in co...
 
Jack murrell wright digestive system
Jack murrell wright digestive systemJack murrell wright digestive system
Jack murrell wright digestive system
 
SharingEconomy: The Buzzword of the Moment
SharingEconomy: The Buzzword of the MomentSharingEconomy: The Buzzword of the Moment
SharingEconomy: The Buzzword of the Moment
 
The secret order of the illuminati
The secret order of the illuminatiThe secret order of the illuminati
The secret order of the illuminati
 
ppt on Industrial policy
ppt on Industrial policyppt on Industrial policy
ppt on Industrial policy
 
A Generic Apple "Steve Jobs" style Keynote Address Presentation
A Generic Apple "Steve Jobs" style Keynote Address PresentationA Generic Apple "Steve Jobs" style Keynote Address Presentation
A Generic Apple "Steve Jobs" style Keynote Address Presentation
 
Illuminati presentation
Illuminati presentationIlluminati presentation
Illuminati presentation
 
Buzzword Bingo 2017
Buzzword Bingo 2017Buzzword Bingo 2017
Buzzword Bingo 2017
 
How to think like a startup v3
How to think like a startup v3How to think like a startup v3
How to think like a startup v3
 
Industrial policy.ppt
Industrial policy.pptIndustrial policy.ppt
Industrial policy.ppt
 
Steve Jobs Inspirational Quotes
Steve Jobs Inspirational QuotesSteve Jobs Inspirational Quotes
Steve Jobs Inspirational Quotes
 
The Build Trap
The Build TrapThe Build Trap
The Build Trap
 
Shall we play a game?
Shall we play a game?Shall we play a game?
Shall we play a game?
 
The Future of Everything
The Future of EverythingThe Future of Everything
The Future of Everything
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
 

Similaire à PHP Doesn't Always Suck

Similaire à PHP Doesn't Always Suck (20)

Article 01 What Is Php
Article 01   What Is PhpArticle 01   What Is Php
Article 01 What Is Php
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
 
Fall 2011 PHP Class - Session 1
Fall 2011 PHP Class - Session 1Fall 2011 PHP Class - Session 1
Fall 2011 PHP Class - Session 1
 
Php
PhpPhp
Php
 
Upstate CSCI 450 PHP Chapters 5, 12, 13
Upstate CSCI 450 PHP Chapters 5, 12, 13Upstate CSCI 450 PHP Chapters 5, 12, 13
Upstate CSCI 450 PHP Chapters 5, 12, 13
 
01 Php Introduction
01 Php Introduction01 Php Introduction
01 Php Introduction
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
 
Php mysql
Php mysqlPhp mysql
Php mysql
 
Php tizag tutorial
Php tizag tutorialPhp tizag tutorial
Php tizag tutorial
 
PHP learning
PHP learningPHP learning
PHP learning
 
php_tizag_tutorial
php_tizag_tutorialphp_tizag_tutorial
php_tizag_tutorial
 
Php tizag tutorial
Php tizag tutorial Php tizag tutorial
Php tizag tutorial
 
php_tizag_tutorial
php_tizag_tutorialphp_tizag_tutorial
php_tizag_tutorial
 
Php tizag tutorial
Php tizag tutorialPhp tizag tutorial
Php tizag tutorial
 
PHP - Introduction to PHP Fundamentals
PHP -  Introduction to PHP FundamentalsPHP -  Introduction to PHP Fundamentals
PHP - Introduction to PHP Fundamentals
 
Using PHP
Using PHPUsing PHP
Using PHP
 

Dernier

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 

Dernier (20)

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 

PHP Doesn't Always Suck

  • 2. Who are you? John Hobbs - Developer at What Cheer - @jmhobbs - https://github.com/jmhobbs - http://velvetcache.org/ PHP Doesn't Suck
  • 3. PHP Sucks T_PAAMAYIM_NEKUDOTAYIM get_class() => gettype() PHPE9568F34-D428-11d2-A769-00AA001ACF42 sort( &$array ) www.phpsadness.com PHP Doesn't Suck
  • 4. PHP Sucks Low Barrier To Entry Weak Community Google-Copy-Paste NIH “In the end I think you will find that your homegrown small framework has saved you time and aggravation and you end up with a better product.” - Rasmus http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html PHP Doesn't Suck
  • 5. I can write terrible code in any language. - Me PHP Doesn't Suck
  • 6. Making It Not Suck Learn the Language http://php.net/manual PHP Doesn't Suck
  • 7. Making It Not Suck Test Your Code http://www.simpletest.org/ http://www.phpunit.de/ http://qa.php.net/write-test.php PHP Doesn't Suck
  • 8. Making It Not Suck NO LIVE EDITS (mostly) CAPISTRANO WORKS FINE WITH PHP PHP Doesn't Suck
  • 9. Making It Not Suck Share & Be shared Github PSR-0 (http://tinyurl.com/yh6jydd) PHP Doesn't Suck
  • 10. Making It Not Suck Have A Style http://www.mediawiki.org/wiki/Manual:Coding_conventions PHP Doesn't Suck
  • 11. Making It Not Suck Try The REPL jmhobbs@Cordelia:~$ phpsh Starting php type 'h' or 'help' to see instructions & features php> echo "Oh hai!"; Oh hai! php> include "test.php"; php> whoa(); lol, functions!1! php> jmhobbs@Cordelia:~$ http://www.phpsh.org/ PHP Doesn't Suck
  • 12. Making It Not Suck Read Code (Including other languages!) PHP Doesn't Suck
  • 13. USE A FRAMEWORK (Hint: Not Zend) PHP Doesn't Suck
  • 14. Use A Framework - HMVC - Useful helpers - Super flexible - Great modules system - Great modules http://kohanaframework.org/ PHP Doesn't Suck
  • 15. Use A Framework namespace appcontrollers; class PostsController extends lithiumactionController { public function index() { return array('foo' => 'bar', 'title' => 'Posts'); } } http://lithify.me/ PHP Doesn't Suck
  • 16. Use A Framework Skunk // Initialize $s = new Skunk(); // Add a route $s->get( '/hi(/<name>)', function ( &$s, $name = “world” ) { $s->body = “Hello $name!"; } ); // Run it! $s->run(); https://github.com/jmhobbs/Skunk PHP Doesn't Suck
  • 18. It's Getting Better 5.4 - http://www.php.net/manual/en/language.oop5.traits.php (Traits => Mixins) - http://svn.php.net/viewvc?view=revision&revision=313641 (Short Array Syntax: [ “a” => “b” ]) - http://news.php.net/php.internals/55293 (SVN => git) PHP Doesn't Suck
  • 19. Discussion Questions? Comments? PHP Doesn't Suck
  • 20. PHP Doesn't Suck This is a presentation about PHP. If you are looking for a fight, leave now.
  • 21. Who are you? John Hobbs - Developer at What Cheer - @jmhobbs - https://github.com/jmhobbs - http://velvetcache.org/ PHP Doesn't Suck I'm John Hobbs. I make fancy websites at What Cheer. I have a twitter and a github and I blog but no one reads it. If I'm known for anything on the Internet it's Beef Taco. Just google Beef Taco and it's the top item. I kid you not.
  • 22. PHP Sucks T_PAAMAYIM_NEKUDOTAYIM get_class() => gettype() PHPE9568F34-D428-11d2-A769-00AA001ACF42 sort( &$array ) www.phpsadness.com PHP Doesn't Suck PHP Sucks. The language itself has some fundamental flaws that crept in early in it's life and have not been excised yet, mostly for compatibility issues. Crappy error messages. Inconsistent naming conventions. Stupid “features” In place array sorts. There is a decent chunk of these, phpsadness.com is a good place to read and track them. PHP has a weird history of full rewrites, but it's held onto backwards compatibility through a lot of them. Zend (4/5) is a decent engine, but the old cruft is lame.
  • 23. PHP Sucks Low Barrier To Entry Weak Community Google-Copy-Paste NIH “In the end I think you will find that your homegrown small framework has saved you time and aggravation and you end up with a better product.” - Rasmus http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html PHP Doesn't Suck Why else does PHP suck? Well, it runs everywhere. It's billed as an easy language to learn, fast. And it is, if you want to write crappy code. The community is, compared to Python and Ruby, fragmented and not sophisticated. Testing is a big problem here. Ever used a phpt? Because PHP is everywhere, you can Google for anything and get some code. Too often people don't read it, they just copy-paste. So they lose a chance to learn and also integrate crappy code. There also seems to be a serious not-invented-here syndrome in PHP. This includes Rasmus. Don't listen to Rasmus.
  • 24. I can write terrible code in any language. - Me PHP Doesn't Suck I can write terrible code in any language. The point is that the quality of the code has a lot to do with who is writing it, and how much they understand. Don't blame everything on the language. So how can we write better PHP?
  • 25. Making It Not Suck Learn the Language http://php.net/manual PHP Doesn't Suck Learn the language. It sounds simple, but I bet there is lots of stuff that even good PHP programmers don't know about PHP. Has anyone here ever written a __clone method? How much of the manual have you read? Have you ever compiled an extension? Written one?
  • 26. Making It Not Suck Test Your Code http://www.simpletest.org/ http://www.phpunit.de/ http://qa.php.net/write-test.php PHP Doesn't Suck Test your code. This is a huuuuge deal. There are good testing tools for PHP, use them. I like SimpleTest, but it's a personal choice, and an easy one. TDD makes you think, something PHP doesn't always make you do. Something else that unit testing does is force you to separate code. PHP is it's own template language, so it's super easy to mix business logic with presentation. Don't. Testing will help.
  • 27. Making It Not Suck NO LIVE EDITS (mostly) CAPISTRANO WORKS FINE WITH PHP PHP Doesn't Suck No live edits. Stay off of production. I admit, I don't use version control on some stuff. One off tools and pages, wordpress blogs, stuff that doesn't really matter. If you are writing an app or a library, you should be using version control and running deployments after all your tests pass. Capistrano gets along fine with PHP, and if you would rather you can use phing and other tools. PHP tempts you to edit live in production. Resist.
  • 28. Making It Not Suck Share & Be shared Github PSR-0 (http://tinyurl.com/yh6jydd) PHP Doesn't Suck Share your code, and use shared code. You don't have to come up with your own version of a lot of things. But don't just blindly copy code or use any old module. Look at the code and make a judgment call. It's okay to fork or rewrite if it's in bad shape, but then share it back to the community! If you are writing a library, be compatible. If it's generic, there are naming conventions like PSR-0. (I admit I am bad at being compatible)
  • 29. Making It Not Suck Have A Style http://www.mediawiki.org/wiki/Manual:Coding_conventions PHP Doesn't Suck Have a style you stick to. Being clear and consistent in your code is essential, no sloppy formatting. Bad style is endemic of google-copy-paste code. If you are working on someone else's project, use their style before you make a pull request. It's polite, it's clean it's essential. I use a variant of MediaWiki's conventions.
  • 30. Making It Not Suck Try The REPL jmhobbs@Cordelia:~$ phpsh Starting php type 'h' or 'help' to see instructions & features php> echo "Oh hai!"; Oh hai! php> include "test.php"; php> whoa(); lol, functions!1! php> jmhobbs@Cordelia:~$ http://www.phpsh.org/ PHP Doesn't Suck Other languages have a great REPL. PHP, not so much. Luckily we have a good one from Facebook, written mostly in Python actually. Get it and give it a shot. When you forget argument ordering it's often easier to try it in the shell than to go look it up on php.net.
  • 31. Making It Not Suck Read Code (Including other languages!) PHP Doesn't Suck Actually READ the code you use. This one is a big one. Read other people's code, the good and the bad. Identify what you like and what you don't like about other people's code. Try out new things you find in other peoples code. And don't be just a PHP programmer. Read and write some other languages, Python, Ruby, whatever. I am convinced the more well read you are, in any language, the better you will be as a programmer.
  • 32. USE A FRAMEWORK (Hint: Not Zend) PHP Doesn't Suck Use a framework. A framework will make you organize your code within a set of conventions. Which conventions don't matter as much as the fact that they exist. I recommend not Zend because it frightens me. Learn your framework well. Read it's core, submit patches, be involved. Here are few examples of frameworks:
  • 33. Use A Framework - HMVC - Useful helpers - Super flexible - Great modules system - Great modules http://kohanaframework.org/ PHP Doesn't Suck I'm a Kohana user. It's not all roses though, there are no migrations either, which is gross. Development moves fast, and breaks api a lot. It's managed with versioning though, and there is plenty of backporting and bug fixes.
  • 34. Use A Framework namespace appcontrollers; class PostsController extends lithiumactionController { public function index() { return array('foo' => 'bar', 'title' => 'Posts'); } } http://lithify.me/ PHP Doesn't Suck Another cool one is Lithium. It's very “leading edge” and uses namespaces like they are going out of style.
  • 35. Use A Framework Skunk // Initialize $s = new Skunk(); // Add a route $s->get( '/hi(/<name>)', function ( &$s, $name = “world” ) { $s->body = “Hello $name!"; } ); // Run it! $s->run(); https://github.com/jmhobbs/Skunk PHP Doesn't Suck Finally I included a Sinatra and Bottle style framework that I wrote. I wouldn't necessarily recommend using Skunk, but it's a good example a little, single file framework with an interesting API and feel.
  • 36. So... PHP Doesn't Suck So. Those are my thoughts on how to write better PHP. As for the language itself...
  • 37. It's Getting Better 5.4 - http://www.php.net/manual/en/language.oop5.traits.php (Traits => Mixins) - http://svn.php.net/viewvc?view=revision&revision=313641 (Short Array Syntax: [ “a” => “b” ]) - http://news.php.net/php.internals/55293 (SVN => git) PHP Doesn't Suck It's getting better. 5.4 is on it's way and it's bringing some fixes for major pain points.
  • 38. Discussion Questions? Comments? PHP Doesn't Suck Please be gentle.