PHPConsistent : a new tool to verify your calls and documentation quality

Back in 2009 and 2010 I wrote about a PHPUnit patch I wrote to automatically verify parameter types in function calls. The feature never made it into PHPUnit and honestly it didn’t really fit into the feature set either. Although I still plan on releasing it as a PHPUnit extension that you can easily load, I’ve since been using it outside of PHPUnit, not just on tests, but on any PHP code.

Introducing PHPConsistent

PHPConsistent will verify your code using both dynamic and static analysis.

The goal is to improve code quality of your code and the libraries you use by :

  • Verifying your code is making calls using the right parameters and parameter types
  • Verifying if the in-line documentation (docblock) of the called functions/methods is accurate

It will compare :

  • Parameter types specified in the docblock <-> types of parameters passed upon calling the function/method
  • Number of parameters specified in the docblock <-> number of parameters actually present in the function/method definition
  • Names of parameters specified in the docblock <-> names of parameters actually present in the function/method definition

Sample output

Invalid type calling SomeClass->GiveMeAnArray : parameter 3 ($somearray) should be of type array but got boolean instead : library/App.php (line 5)
Parameter names in function definition and docblock don't match when calling JustAnotherFunction : parameter 2 ($inputFilename) should be called $inputFile according to docblock : application/Bootstrap.php (line 214)
Parameter count in function definition and docblock don't match when calling OneMoreFunction : function has 6 but should be 5 according to docblock : application/Bootstrap.php (line 215)

Performance

Keep in mind that PHPConsistent relies on Xdebug’s trace functionality, making it quite slow. It also needs to analyze the output of that trace, making it even slower. So it’s definitely not something you want to run on a production environment !

Want to know more ?

Check out the PHPConsistent Github page

ShareFlattr the authorTweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

flattr this!

PHPCompatibility update

Update (Nov 3, 2013) : changed the parameters to reflect the new changes in PHP_CodeSniffer

Just a quick post about the updates made to PHPCompatibility.

I did a talk on PHP 5.4/5.5 at Zendcon, not just about what’s new and why you should upgrade, but also about the way PHPCompatibility can ease the pain. I received very good feedback, as well as very interesting questions. As a result, I added a feature I’ve wanted to add for a long time : the option to specify which PHP version to check for.

Here’s the caveat : it requires a change to PHP_CodeSniffer. I’m hoping that change will be accepted soon. From that point onwards, if you have the latest PHP_CodeSniffer (you might want to get it from Github).

So then you will be able to do :

phpcs --standard=PHPCompatibility --runtime-set testVersion 5.4 <path-of-your-php-files>

You can also test for backwards compatibility of your code by specifying versions like 5.2, which causes it to check whether you’re using functions or keywords not known to this older version. Quite nice if you’re coding on PHP 5.5, but your system engineer tells you half way through the project the project will have to be deployed on 5.2.

Important note : if you want to test backwards compatibility, it’s best to run on the latest PHP version available (5.5 right now), for the simple reason that if you have, for example, the keyword ‘yield’ in your code, PHP_CodeSniffer can only recognize it when you’re running PHP 5.5. It can only tell you it’s not available in previous versions if it actually knows what it is.

Expect more compatibility tools soon, as I have some more ideas, such as how to automatically figure out whether and where you’re still relying on register_globals and magic quotes ;-)

ShareFlattr the authorTweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

flattr this!

Busy busy + updates

My blog has been very quiet for about 10 months, so I thought I’d write a quick update on what I’ve been doing :
- Work has been extremely busy, with lots of new projects and lots of existing projects needing changes
- Not really helping my workload is my health, which has been slightly troubling since I got Pfeiffer’s disease last year. Although I’m mostly rid of it, it’s one of those annoying things that, even if your body has beaten it, it tends to cause some after effects.
- I’ve been speaking at a lot conferences in Europe and the US (check the conferences page on the right). All this travel hasn’t exactly been good for recovering from the above either ;-)
- When I find the time, I try to put on my dancing shoes and have a good time dancing the stress away

So what’s coming up :
- More work, lots more actually. We’re about to launch a new IPv6 service and are working on exciting projects for several clients
- More conferences. In fact, I have 6 more planned right now. Looking forward to them though, as they’re in some of my favourite places (like San Francisco !)
- Planning on finally finishing some of the open source projects I’ve been working on, as well as starting a few additional ones
- Planning on working on some other projects, based on ideas I had years ago. Maybe I’ll finally get around to building them ?

And finally, I intend to write some more blog posts about various topics. Some of those posts are already partially finished. So expect more activity here ;-)

ShareFlattr the authorTweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

flattr this!

Conferences, development, ideas, …

I just returned from PHPCon Poland, a very nice conference taking place in the middle of beautiful scenery. Although there were only 5 talks in English (3 of which were given by Belgians – Thijs Feryn, Michelangelo Van Dam and myself), the conference was definitely interesting and fun.
I gave a relatively new talk, that I first presented as a 20-min ‘lightning talk’ at ZendCon Uncon 2011. It’s evolved into a 45-min talk (ok, it was only 38-min so I can add some content next time) titled ‘Remove PHP calls and scale your site like crazy’ in which I explain more about the Nginx extension we’re building to improve the performance and scalability of sites with user-specific content. I received some pretty good feedback on Joind.in and lots of people approached me afterwards, wanting to learn even more about it.

I also submitted 6 talks for Confoo, which is supposed to be one of the best web development conferences out there. Not sure if I’ll make it, but if you want to help out, feel free to vote for me. Registration is required to vote, but takes only a minute.

Lots of ideas buzzing in my head, but sadly not enough time to work on them. The Nginx thing is cool, but it’s what I call ‘phase 1′… which means there’s a ‘phase 2′ (in fact, there’s even a ‘phase 3′). But since that requires even more time, it’ll probably be for when phase 1 has been completed.

In the meantime, we’re on the hunt for people looking for a new challenge. If you’re looking to be seriously challenged, check out our jobs page and feel free to tweet/mail/call me ;-)

ShareFlattr the authorTweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

flattr this!

Sporza.be zonder voetbal (for Belgian users)

For the English readers of my blog : this post is for Belgian users who want to use Sporza.be (a big Belgian sports site) without all the soccer content, since that usually fills over 80% of the site. So the content is in Dutch, sorry ;-)

Sporza zonder al de voetbal… niet ideaal voor de voetbalfans, maar die hebben sites als Voetbalkrant om hun voetbalnieuws te halen. Dus er is geen enkele reden waarom 80% van Sporza.be vol moet staan met voetbal. Maar aangezien je dat niet zelf kan aanpassen, is hier de manier om Sporza.be te bekijken zonder voetbal.

Voor Firefox-gebruikers

  • Download Greasemonkey hier. Mogelijk moet je Firefox even herstarten.
  • Klik hier en kies Install/Installeren
  • Surf naar Sporza

Voor Chrome-gebruikers

  • Klik hier en kies Continue/Verder
  • Surf naar Sporza

Voor gebruikers van Internet Explorer

  • Surf naar hier
  • Download en installeer Chrome
  • Volg bovenstaande instructies
ShareFlattr the authorTweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

flattr this!

Technical and business stuff for the open-minded