PHP Code Style

Few ways you can simplify, how you should standardise your PHP code style, by following PSR-12.

For start, you need to use PHP CS Fixer to automate fixing the code style. Do install it and try it out.

Few options available for you to use - details as following.

Option 1

You can create your own bash script, to simplify your command to fix your code. One of my choice, is using a Bash script:

#!/usr/bin/env bash

CSFIX="php-cs-fixer"

if [ ! -f "$CSFIX" ]; then
    if ! type "php-cs-fixer" > /dev/null; then
      clear
      echo "☠️ You need PHP CS Fixer to run this command." 
      return
    fi    
fi

$CSFIX fix

if [[ `git status --porcelain` ]]; then
  git add .
  git commit -m "Apply PHP CS Fixer"
  MESSAGE="🎉 Successfully complied with PSR-2"
else
  MESSAGE="🎉 You already complied with PSR-2"
fi

echo $MESSAGE

Make sure to make above script executable - chmod +x csfix, then you can run on your current project.

. ./csfix

I like this way, cause you can put some fancy words, and messages on each scenario when running the PHP CS Fixer.

Option 2

Your team may use different operating system - MacOS, Windows, Ubuntu - and above option may not very friendly to Windows. You may go with this option - put it on Composer script command.

In the scripts section in your composer.json file, add the following:

{
    "scripts": {
        "csfix": [
            "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix",
            "git add . && git commit -m '🎨 Apply PHP CS Fixer'"
        ]
    }
}

Use the PHP_CS_FIXER_IGNORE_ENV=1 if you are running on PHP8.1. At the moment, still unable to run PHP CS Fixer on PHP8.1.

With above setup, you can run:

composer csfix
> PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix
PHP needs to be a minimum version of PHP 7.2.5 and maximum version of PHP 8.0.*.
Current PHP version: 8.1.0.
Ignoring environment requirements because `PHP_CS_FIXER_IGNORE_ENV` is set. Execution may be unstable.
Loaded config default from "/Users/nasrulhazim/Projects/2021/demo/.php-cs-fixer.php".
Using cache file ".php-cs-fixer.cache".
   1) database/seeders/Mock/DemoSeeder.php

Fixed all files in 0.021 seconds, 18.000 MB memory used
> git add . && git commit -m '🎨 Apply PHP CS Fixer'
[develop 254c4d7] 🎨 Apply PHP CS Fixer
 1 file changed, 1 insertion(+), 1 deletion(-)

Noticed that I use the git as well - am too lazy to check if there's changes or not, just commit it right away.

So, with this approach, all your team members can have the same command to be use - composer csfix.

Option 3

If you are looking at more, automated process - you can go with StyleCI, or even have your own Github Action / Bitbucket Pipeline to do all the job.

For Github Action, you may refer to this example, how it can be done or you can refer to the following snippet:

name: Check & fix styling

on: [push]

jobs:
  php-cs-fixer:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}

      - name: Run PHP CS Fixer
        uses: docker://oskarstark/php-cs-fixer-ga
        with:
          args: --config=.php_cs.dist.php --allow-risky=yes

      - name: Commit changes
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Fix styling

Hopes the options given will help you on make your project much cleaner and standard across your team practices.

Photo by Eugen Str on Unsplash

42