Skip to main content

What are the PHP-specific antipatterns that you know of?



PHP as a Blunt Instrument





I hear PHP getting bashed around a lot lately. In quite a few projects, I have seen insane php code bases - so bad you really wonder if the person was on hallucinogenic drugs when they wrote the code. Sometimes, I wonder what the code would have been like if the initial developers had a bit more guidance as to what not to do.





However, I have also seen some very well organized PHP projects that were done in 100% OOP and were a pleasure to maintain, but they were not written by "php programmers."





I give all of our junior devs a link to Java Anti-Patterns . One of the nice things about that page is the Java-specific examples because there are many features of Java that lend themselves to common mistakes. I was hoping to find a similar list for php, but a google search did not reveal anything meaningful.





There are a few questions already out there for what a developer should know when programming PHP , but I wanted to focus on the negative.





What are the common things you have seen in PHP that should be avoided and what is a common solution to doing the same thing in a better way?





Some of the obvious examples to me that I think will be mentioned but aren't PHP specific:





  • Don't concatenate SQL. Use prepare statements or proper escaping.



  • Don't blindly embed PHP into HTML - use templating/MVC.



  • Don't blindly post raw unfiltered user input - scrub it for XSS attacks.



  • Don't manually try to parse all of your POSTs and GETs - use a web framework.







Here would be some examples that I would consider PHP specific:





  • Don't have too many layers of file include/require linking and try to avoid conditional linking. Rather, have a sane naming convention and be consistent with your organization.



  • Don't use PHPs raw database API unless you can help it, instead use a database framework like ADODB instead.



  • Don't overuse PHP's dynamic typing by setting the variable to a string in one place and a boolean somewhere else, then expecting the boolean tests to make sense.







So, what are your favorite PHP don'ts and how do you do it right?



Source: Tips4all

Comments

  1. I disagree with this one:


    Don't blindly embed PHP into HTML - use templating/MVC.


    PHP is a templating language. While I agree with the concept of implementing MVC, I don't see why there should be a requirement to implement a yet another DSL around producing web output.

    ReplyDelete
  2. How Is PHP Done the Right Way? covers a lot of these issues.

    ReplyDelete
  3. Never EVER use a $_GET or $_POST without checking it and cleaning it up.
    Read about how to set up the php.ini right.
    Never put variables into raw SQL.
    If you use frameworks, use the ones with less dependencies.
    Stop over-generalization.
    Distribute your code on the php files. In most cases there is no real need to put everything into one index.php.
    Reduce complexity before writing code.
    Respect the fact that it is a web application. (Try to be RESTful.) It's not a desktop application. So stop putting everything into $_SESSION.
    At least one comment line for every 10 lines of code. You WILL read that after a year. I promise!
    Code like a girl - make it nice to read.

    ReplyDelete
  4. One of my favourite DON'Ts would have to be:

    $query = 'select * from users where username = ' . $_POST['username'];


    Can it get much scarier than that?

    ReplyDelete
  5. If I had to include a favourite don't it has to be the one posted by karim79:

    $query = 'select * from users where username = ' . $_POST['username'];


    Many developers in PHP keep stuck in structured age. PHP supports classes and objects since a while ago, I just don't get why people keep hard coding PHP into html, without templates or nothing at all.

    I believe that developers from other languages, like .NET or Java have earned the right to criticize the language if so many developers keep programming like that. PHP is a very great language, very flexible, still a little junior but is growing, but many just don't get it, all they want is to solve by making the old classic copy & paste.

    ReplyDelete
  6. use SPL
    use PDO instead of using mysql_query or pg_query or others
    always use the filter extension on user input

    ReplyDelete

Post a Comment

Popular posts from this blog

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex