What are the main differences between the PSR-2 coding standard and the Symfony2 code standard for phpcs?

k0pernikus picture k0pernikus · Jun 15, 2015 · Viewed 8.9k times · Source

I am trying to figure out which code style to enforce with the phpcs code sniffer.

Since the popularity of Symfony2, it seems to be a good practice to use its code standard. On the other hand, its code style is based upon PSR2, so this seems to be the most basic style one should use.

Furthermore, in the basic installation of squizlabs/php_codesniffer, the Symfony2 standard is not included and has to be manually installed whereas the PSR2 is easily available.

So I want to know the the main difference of the Symfony2 guideline as compared to the PSR2 in order to decide which to use.

For instance, I realized that Symfony2 style enforces that Concat operator must not be surrounded by spaces while the PSR2 ignores this case. Yet I did not find an easy way to list the differences. I looked in the rulseset.xml but it was not that clear to me how it is set up.

I am interested in how to get a complete lists of the differences between the PSR2 and Symfony2 code standard.

Answer

Nic Wortel picture Nic Wortel · Jun 18, 2015

The Symfony coding standards basically extend the PSR standards. PSR-2 doesn't specify rules for all situations, so the Symfony standards add some rules on top of PSR-2.

As you said the PHP CodeSniffer repository doesn't include a ruleset for Symfony. There are multiple third-party implementations of a Symfony2 ruleset, so the exact list of differences between them and the PSR-2 ruleset depends on the implementation you choose.

However, when looking to the differences between the standards of Symfony and PSR (not the rulesets for PHP CodeSniffer), some additions by the Symfony standards are:

  • Not adding spaces around the concatenation operator (.)
  • Adding a comma after each array item in a multi-line array, even after the last one
  • Adding a blank line before return statements (unless the return is alone inside a statement-group (like an if statement))
  • Declaring class properties before methods
  • Declaring public members first, then protected, then private (except class constructors and the setUp and tearDown methods for PHPUnit classes)

These are just some examples, take a look at the Symfony coding standards for the full list.

In my opinion the Symfony standards make sense and I try to use them whenever I can, even outside of Symfony projects.