SlideShare a Scribd company logo
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.

More Related Content

What's hot

Ppt karaoke game
Ppt karaoke gamePpt karaoke game
Ppt karaoke game
TEss30
 
Epic 2 ppts
Epic 2 pptsEpic 2 ppts
Epic 2 ppts
TEss30
 
Chicken
ChickenChicken
Chicken
guestf65951a
 
PowerPoint Karaoke (Sample Presentation)
PowerPoint Karaoke (Sample Presentation)PowerPoint Karaoke (Sample Presentation)
PowerPoint Karaoke (Sample Presentation)
Amber Case
 
PowerPoint Karaoke
PowerPoint KaraokePowerPoint Karaoke
PowerPoint Karaoke
Dave Manningsmith
 
Power Point Karaoke for 6
Power Point Karaoke for 6Power Point Karaoke for 6
Power Point Karaoke for 6
Amber Case
 
My little pony
My little ponyMy little pony
My little pony
Everlight
 
Open Government Is Like Poetry
Open Government Is Like PoetryOpen Government Is Like Poetry
Open Government Is Like Poetry
Joshua Tauberer
 
Powerpoint Karaoke, Maputo 2015
Powerpoint Karaoke, Maputo 2015Powerpoint Karaoke, Maputo 2015
Powerpoint Karaoke, Maputo 2015
Suranga Nath Kasthurirathne
 
Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!
Luz Bratcher
 
Tauben (Powerpoint Karaoke)
Tauben (Powerpoint Karaoke)Tauben (Powerpoint Karaoke)
Tauben (Powerpoint Karaoke)
Bart Fehr
 
Death By Powerpoint
Death By PowerpointDeath By Powerpoint
Death By Powerpoint
Ryan Flynn
 
Powerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE SessionPowerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE Session
Jon Corippo
 
Spannbeton (Powerpoint-Karaoke)
Spannbeton (Powerpoint-Karaoke)Spannbeton (Powerpoint-Karaoke)
Spannbeton (Powerpoint-Karaoke)
digezz
 
Managing your boss v3
Managing your boss v3Managing your boss v3
Managing your boss v3
Sergii Zabigailo
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Battledecks Il09
Battledecks Il09Battledecks Il09
Battledecks Il09
Janie Hermann
 
8 steps to overcome your fear of public speaking
8 steps to overcome your fear of public speaking8 steps to overcome your fear of public speaking
8 steps to overcome your fear of public speaking
GetSmarter
 
McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2
Frank Lang
 
BCA documents
BCA documentsBCA documents
BCA documents
Post-Bulletin Co.
 

What's hot (20)

Ppt karaoke game
Ppt karaoke gamePpt karaoke game
Ppt karaoke game
 
Epic 2 ppts
Epic 2 pptsEpic 2 ppts
Epic 2 ppts
 
Chicken
ChickenChicken
Chicken
 
PowerPoint Karaoke (Sample Presentation)
PowerPoint Karaoke (Sample Presentation)PowerPoint Karaoke (Sample Presentation)
PowerPoint Karaoke (Sample Presentation)
 
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
 
My little pony
My little ponyMy little pony
My little pony
 
Open Government Is Like Poetry
Open Government Is Like PoetryOpen Government Is Like Poetry
Open Government Is Like Poetry
 
Powerpoint Karaoke, Maputo 2015
Powerpoint Karaoke, Maputo 2015Powerpoint Karaoke, Maputo 2015
Powerpoint Karaoke, Maputo 2015
 
Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!
 
Tauben (Powerpoint Karaoke)
Tauben (Powerpoint Karaoke)Tauben (Powerpoint Karaoke)
Tauben (Powerpoint Karaoke)
 
Death By Powerpoint
Death By PowerpointDeath By Powerpoint
Death By Powerpoint
 
Powerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE SessionPowerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE Session
 
Spannbeton (Powerpoint-Karaoke)
Spannbeton (Powerpoint-Karaoke)Spannbeton (Powerpoint-Karaoke)
Spannbeton (Powerpoint-Karaoke)
 
Managing your boss v3
Managing your boss v3Managing your boss v3
Managing your boss v3
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Battledecks Il09
Battledecks Il09Battledecks Il09
Battledecks Il09
 
8 steps to overcome your fear of public speaking
8 steps to overcome your fear of public speaking8 steps to overcome your fear of public speaking
8 steps to overcome your fear of public speaking
 
McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2
 
BCA documents
BCA documentsBCA documents
BCA documents
 

Viewers also liked

Unit testing in PHP
Unit testing in PHPUnit testing in PHP
Unit testing in PHP
Lee Boynton
 
Random powerpoint
Random powerpointRandom powerpoint
Random powerpoint
IlluimnatiIsGr8
 
Erin elchesyn the digestive system
Erin elchesyn the digestive systemErin elchesyn the digestive system
Erin elchesyn the digestive system
Mrs Seo
 
Wwe john cena
Wwe john cenaWwe john cena
Wwe john cena
Tharun Sivakumar
 
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 system
Mrs Seo
 
SharingEconomy: The Buzzword of the Moment
SharingEconomy: The Buzzword of the MomentSharingEconomy: The Buzzword of the Moment
SharingEconomy: The Buzzword of the Moment
Simone Cicero
 
The secret order of the illuminati
The secret order of the illuminatiThe secret order of the illuminati
The secret order of the illuminati
Riaz Zalil
 
ppt on Industrial policy
ppt on Industrial policyppt on Industrial policy
ppt on Industrial policy
Codelaxy 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 Presentation
The App Store Chronicle
 
Illuminati presentation
Illuminati presentationIlluminati presentation
Illuminati presentation
04burkem
 
Buzzword Bingo 2017
Buzzword Bingo 2017Buzzword Bingo 2017
Buzzword Bingo 2017
ron 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 v3
Loic Le Meur
 
Industrial policy.ppt
Industrial policy.pptIndustrial policy.ppt
Industrial policy.ppt
Shikha Gupta
 
Steve Jobs Inspirational Quotes
Steve Jobs Inspirational QuotesSteve Jobs Inspirational Quotes
Steve Jobs Inspirational Quotes
InsideView
 
The Build Trap
The Build TrapThe Build Trap
The Build Trap
Melissa Perri
 
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 Everything
Charbel Zeaiter
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
Luminary Labs
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
Aaron Irizarry
 

Viewers also liked (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
 

Similar to PHP Doesn't Suck

Article 01 What Is Php
Article 01   What Is PhpArticle 01   What Is Php
Article 01 What Is Php
drperl
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
tutorialsruby
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
tutorialsruby
 
Fall 2011 PHP Class - Session 1
Fall 2011 PHP Class - Session 1Fall 2011 PHP Class - Session 1
Fall 2011 PHP Class - Session 1
jimbojsb
 
Php
PhpPhp
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
DanWooster1
 
01 Php Introduction
01 Php Introduction01 Php Introduction
01 Php Introduction
Geshan Manandhar
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
Niit
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
sushil kumar
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
Nguyễn Hoà
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
vigneswaran54
 
Php mysql
Php mysqlPhp mysql
Php tizag tutorial
Php tizag tutorialPhp tizag tutorial
Php tizag tutorial
Pradeep Kumar
 
PHP learning
PHP learningPHP learning
PHP learning
Self-Employed
 
Php tizag tutorial
Php tizag tutorialPhp tizag tutorial
Php tizag tutorial
PrinceGuru MS
 
Php tizag tutorial
Php tizag tutorial Php tizag tutorial
Php tizag tutorial
jaggu536
 
php_tizag_tutorial
php_tizag_tutorialphp_tizag_tutorial
php_tizag_tutorial
tutorialsruby
 
php_tizag_tutorial
php_tizag_tutorialphp_tizag_tutorial
php_tizag_tutorial
tutorialsruby
 
PHP - Introduction to PHP Fundamentals
PHP -  Introduction to PHP FundamentalsPHP -  Introduction to PHP Fundamentals
PHP - Introduction to PHP Fundamentals
Vibrant Technologies & Computers
 
Using PHP
Using PHPUsing PHP
Using PHP
Mark Casias
 

Similar to PHP Doesn't 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
 

Recently uploaded

Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
Safe Software
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
LizaNolte
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
DianaGray10
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
UiPathCommunity
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
Vadym Kazulkin
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 

Recently uploaded (20)

Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 

PHP Doesn't 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.