我有两个特殊情况,我不同意一个同事,是否应该使用常数.
我们使用一个大致像Symfony 1.x的自制框架.
>初始代码是,在一个路由选择PHP配置文件中进行路由,就像这样:
$router->map('/some_url',array('module' => 'some_module','action' => 'some_action')); $router->map('/some_other_url','action' => 'some_action')); // etc.
同事将其改为:
$router->map('/some_url',array(MODULE => 'some_module',ACTION => 'some_action')); $router->map('/some_other_url',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,登录名显然不大可能改变.尽管如此,如果声明常量在这里真的很好,我建议至少更精确的名称,例如FIELDNAME_UNID和FIELDNAME_LOGIN …
引入这些常数真的很相关(也就是说,命名应该是改进的),或者(我猜想)完全没用?
谢谢.
编辑
几个月后,这里有几条(令人难以置信的)lines.PHP文件.
我肯定发现这是一个完全无用的混乱,类似于this DailyWTF post.太多的常数杀死常数.
define('POST','POST'); define('GET','GET'); define('PROJECT','project'); define('APPLICATION','application'); define('MODULE','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.
有一个使用常量的有效参数.
如果你不小心做了像:
$router->map('/some_url',array('moduel' => 'some_module','action' => 'some_action'));
它将以一些未定义的方式失败(注意拼写错误的“moduel”).
如果您在涉及常数时发生拼写错误或拼写错误,PHP会发出通知,并立即抓住.
实际上节省你的频率是一个辩论的问题.就个人而言,我通常不认为这是值得的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。