PHP: Полиморфизм

Теория: Диспетчеризация по имени файла

Ещё один интересный приём – диспетчеризация по имени файла.

В некоторых системах принято иметь не один файл с разными ключами для конфигурации, а разные файлы, относящиеся к разным средам. Например:

configs/ database.development.json database.production.json database.test.json

Где-то в исходниках должен быть код, который выбирает какой файл загружать. Ниже код использует диспетчеризацию по ключу:

<?php

$configFileNamesByEnv = [
    'development' => 'database.development.json',
    'production' => 'database.production.json',
    'test' => 'database.test.json'
];

$filename = $configFileNamesByEnv[$env];
$raw = file_get_contents($filename);
$config = json_decode($raw);

Нетрудно заметить, что имея название среды запуска, можно составить подходящее имя файла. Так и сделаем:

<?php

$filename = "database.{$env}.json";
$raw = file_get_contents($filename);
$config = json_decode($raw);

Код стал намного короче и больше не требует изменения при расширении.