A better way to write config files in PHP

How many times have you seen something like this in a config file?

$db_host = 'localhost';
$db_name = 'somedb';
$db_user = 'someuser';
$db_pass = 'somepass';

Then, of course, it gets included and the variables are referenced as globals:

include('config.php');
echo $db_host; // 'localhost'

A better way #

I'm not a fan of using global variables when they can be avoided, so here's an alternative that gives you much more flexibility with your config files.

return [
  'host' => 'localhost',
  'name' => 'somedb',
  'user' => 'someuser',
  'pass' => 'somepass'
];

Simply returning the array allows you to include it into any variable you choose, which is much nicer than cluttering the global namespace with your config.

$database = include('config.php');
echo $database['host']; // 'localhost'

Of course, you can return any data you want with this approach — even a multidimensional array.

return [
  'database' => [
    'host' => 'localhost',
    'name' => 'somedb',
    'user' => 'someuser',
    'pass' => 'somepass'
  ],
  'other-stuff' => ...
];

This is by far my favorite way to write config files in PHP.