У меня есть два частных случая, когда я не согласен с коллегой, следует ли использовать константы или нет.
Мы используем самодельный фреймворк, работающий примерно так же, как 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.