Let’s start with a joke. This GitHub repository:
“It’s funny ’cause it’s true” -Homer Simpson
Text configuration files (XML, Yaml, JSON, INI, …) work when the configuration is read once, the software persists in memory, and the application doesn’t exit until the user is done.
This is not what PHP does best. Sure PHP also reads the configuration file “once” but the fundamental difference is that PHP starts and exits dozens, maybe hundreds, of times for a single user using a single application.
The metaphorical equivalent would be relaunching World Of Warcraft every time time a user clicks on something.
For PHP to be the right tool for the right job, it has to be fast. Fast for developers to develop in *and* also fast for end users. (Hooray for PHP7!)
Some clever devs get around configuration performance problems by adding extra steps such as transpiling text into pure PHP before deploying, but do these complicated solutions really serve the PHP developer and the underlying philosophy of how we write code? When it comes to PHP there is a nuanced difference between “performance” and “fast.”
Let’s talk about JSON.
Wow. Talk about language independence. No reprocessing!
The equivalent in PHP:
$php = [ 'this' => 'is', 'valid' => 'php' ];
Tada! No overhead of having to validate, process, and convert to PHP. Is it uglier? Debatable.
To be clear: XML, Yaml, JSON, and friends are fine as documents or as data to be processed by PHP. This is totally normal and sometimes even useful. 😉 Barring that, any reasonable PHP developer must conclude that configuration files cannot be a bottleneck. Not a bottleneck for speed of delivering shippable code, nor a bottleneck for acceptable performance. When choosing anything other than native PHP for configuration you are making a trade-off. Is the trade off worth it? The answer is always no. 1
But the secretary needs to be able to edit the app config live on the server and PHP is too hard for him!
But caching! But Transpiling!
But I like coding parsers!
Cool! Use your powers for docs and data, not PHP configs.
 Unless you are storing your PHP configs in Apache or Nginx as ENV variables. Then to you madam or sir, I bow down.
One thought on “PHP Configuration Files Rant”
CoffeeScript is great for config files!