У меня есть два конкретных случая, когда я не согласен с коллегой по поводу того, следует ли использовать константы или нет.
Мы используем самодельный фреймворк, работающий примерно как Symfony 1.x.
Исходный код был в конфигурационном файле маршрутизации PHP для маршрутизации, например:
$router->map('/some_url', array('module' => 'some_module', 'action' => 'some_action')); $router->map('/some_other_url', array('module' => 'some_module', 'action' => 'some_action')); // etc.
Сотрудник изменил его на:
$router->map('/some_url', array(MODULE => 'some_module', ACTION => 'some_action')); $router->map('/some_other_url', array(MODULE => 'some_module', ACTION => 'some_action')); // + in constants.php file: define('MODULE', 'module'); define('ACTION', 'action');
IMO, это постоянное чрезмерное использование: если понятие «модуль» или «действие» когда-либо будет переименовано, его придется переименовать во всем коде, будь то в виде строки или константы. Кроме того, указанные выше имена констант не имеют конкретного значения, что способствует коллизиям/путаницам в именах.
Пример исходного кода:
if (isset($_SESSION['unid']) && isset($_SESSION['login'])) { ... }
Изменено коллегой:
if (isset($_SESSION[UNID]) && isset($_SESSION[LOGIN])) { ... } // + in a constants.php file: define('UNID', 'unid'); define('LOGIN', 'login');
В нашем приложении имена этих сеансовых переменных
unid
иlogin
вряд ли изменятся. Тем не менее, если бы объявление констант было действительно хорошей практикой, я бы предложил хотя бы более точные имена, напримерFIELDNAME_UNID
иFIELDNAME_LOGIN
...
Является ли введение этих констант действительно актуальным (то есть, именование должно быть просто улучшено) или (как я предполагаю) совершенно бесполезным?
Спасибо.
ИЗМЕНИТЬ
Спустя несколько месяцев вот несколько (невероятных) строк из файла constants.php. Я определенно нахожу это совершенно бесполезным беспорядком, похожим на эту публикацию DailyWTF. Слишком много констант убивает константы.
define('POST', 'POST');
define('GET', 'GET');
define('PROJECT', 'project');
define('APPLICATION', 'application');
define('MODULE', 'module');
define('ACTION', 'action');
define('ID', 'id');
define('SLUG', 'slug');
define('CONTROLLER', 'controller');
define('CONTENT', 'content');
define('AJAX', 'ajax');
define('EXECUTE', 'execute');
define('FORMAT', 'format');
define('BASE_HREF_CONSTANT', 'basehref');
define('UNID', 'unid');
define('USERNAME', 'username');
define('PASSWORD', 'password');
define('TEMPLATE', 'templates');
define('UNSECURE', 'unsecure');
define('MODE', 'mode');
define('MESSAGE', 'message');
define('TEMPORARY_SESSION', 'temporary_session');
define('ERRORMESSAGE', 'errormessage');
define('START_FROM', 'startfrom');
define('COUNT', 'count');
// and so on.