我有两个不同意同事的特殊情况,是否应该使用常量。
我们使用了一个与 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.