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
 
Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!
Luz Bratcher
 
Death By Powerpoint
Death By PowerpointDeath By Powerpoint
Death By Powerpoint
Ryan Flynn
 
PowerPoint Karaoke Slides - The Internet
PowerPoint Karaoke Slides - The InternetPowerPoint Karaoke Slides - The Internet
PowerPoint Karaoke Slides - The Internet
pampf
 
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
 
McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2
Frank Lang
 
Präsentationstraining PowerPoint Karaoke
Präsentationstraining PowerPoint KaraokePräsentationstraining PowerPoint Karaoke
Präsentationstraining PowerPoint Karaokemspgermany
 
Zombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesikZombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesik
Eric Pesik
 
PowerPoint Karaoke
PowerPoint KaraokePowerPoint Karaoke
PowerPoint Karaoke
Dave Manningsmith
 
Powerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE SessionPowerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE Session
Jon Corippo
 
Slides That Rock
Slides That RockSlides That Rock
Slides That Rock
Slides That Rock
 
Science of Achievement & Art of Fulfillment | Tony Robbins
Science of Achievement & Art of Fulfillment | Tony Robbins Science of Achievement & Art of Fulfillment | Tony Robbins
Science of Achievement & Art of Fulfillment | Tony Robbins
Tony Robbins
 
How to Use Photography for Great Presentations
How to Use Photography for Great PresentationsHow to Use Photography for Great Presentations
How to Use Photography for Great Presentations
LinkedIn Learning Solutions
 
Boring to Bold: Presentation Design Ideas for Non-Designers
Boring to Bold: Presentation Design Ideas for Non-DesignersBoring to Bold: Presentation Design Ideas for Non-Designers
Boring to Bold: Presentation Design Ideas for Non-Designers
Michael Gowin
 
My Top 10 slides on presentations
My Top 10 slides on presentationsMy Top 10 slides on presentations
My Top 10 slides on presentations
Alexei Kapterev
 
Connect With Your Audience
Connect With Your AudienceConnect With Your Audience
Connect With Your Audience
Slides That Rock
 
powerpoint karaoke
powerpoint karaokepowerpoint karaoke
powerpoint karaoke
María Berenguer Caballero
 
What Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
What Would Steve Do? 10 Lessons from the World's Most Captivating PresentersWhat Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
What Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
HubSpot
 

What's hot (20)

Ppt karaoke game
Ppt karaoke gamePpt karaoke game
Ppt karaoke game
 
Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!Seattle Creative Mornings: Battledecks!
Seattle Creative Mornings: Battledecks!
 
Death By Powerpoint
Death By PowerpointDeath By Powerpoint
Death By Powerpoint
 
PowerPoint Karaoke Slides - The Internet
PowerPoint Karaoke Slides - The InternetPowerPoint Karaoke Slides - The Internet
PowerPoint Karaoke Slides - The Internet
 
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
 
McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2McCann Sydney PowerPoint Karaoke 2
McCann Sydney PowerPoint Karaoke 2
 
Präsentationstraining PowerPoint Karaoke
Präsentationstraining PowerPoint KaraokePräsentationstraining PowerPoint Karaoke
Präsentationstraining PowerPoint Karaoke
 
Zombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesikZombie PowerPoint by @ericpesik
Zombie PowerPoint by @ericpesik
 
PowerPoint Karaoke
PowerPoint KaraokePowerPoint Karaoke
PowerPoint Karaoke
 
Powerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE SessionPowerpoint Karaoke - ISTE Session
Powerpoint Karaoke - ISTE Session
 
Slides That Rock
Slides That RockSlides That Rock
Slides That Rock
 
Science of Achievement & Art of Fulfillment | Tony Robbins
Science of Achievement & Art of Fulfillment | Tony Robbins Science of Achievement & Art of Fulfillment | Tony Robbins
Science of Achievement & Art of Fulfillment | Tony Robbins
 
How to Use Photography for Great Presentations
How to Use Photography for Great PresentationsHow to Use Photography for Great Presentations
How to Use Photography for Great Presentations
 
Boring to Bold: Presentation Design Ideas for Non-Designers
Boring to Bold: Presentation Design Ideas for Non-DesignersBoring to Bold: Presentation Design Ideas for Non-Designers
Boring to Bold: Presentation Design Ideas for Non-Designers
 
My Top 10 slides on presentations
My Top 10 slides on presentationsMy Top 10 slides on presentations
My Top 10 slides on presentations
 
Connect With Your Audience
Connect With Your AudienceConnect With Your Audience
Connect With Your Audience
 
powerpoint karaoke
powerpoint karaokepowerpoint karaoke
powerpoint karaoke
 
What Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
What Would Steve Do? 10 Lessons from the World's Most Captivating PresentersWhat Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
What Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
 

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
 
8 Things to Do Before You Manage Your Boss
8 Things to Do Before You Manage Your Boss8 Things to Do Before You Manage Your Boss
8 Things to Do Before You Manage Your Boss
Wiley
 
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
 

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
 
8 Things to Do Before You Manage Your Boss
8 Things to Do Before You Manage Your Boss8 Things to Do Before You Manage Your Boss
8 Things to Do Before You Manage Your Boss
 
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
 

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

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 

Recently uploaded (20)

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 

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.