首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP字符串常量过度使用?

问PHP字符串常量过度使用?
EN

Stack Overflow用户
提问于 2011-06-28 23:31:28
回答 3查看 2.8K关注 0票数 10

我有两个特殊的例子,我不同意一个同事,是否应该使用常量。

我们使用了一个类似Symfony 1.x的自制框架。

  1. 初始代码在用于路由的路由PHP配置文件中,如下所示: $路由器->映射(‘/ => _url’,数组(‘模块’一些‘_模块’,‘动作’=>‘some_action’);$路由器->映射(‘/some_url’,数组(模块‘=>’Some模块‘,动作’=> 'some_action'));//等等。 该同事将其改为: $路由器->映射(‘/ => _url’,数组(模块=> _模块,动作=>‘some_action’);$路由器->映射(‘/some_url’,数组(模块=>‘Some模块’,ACTION => 'some_action'));// constants.php文件中的//+:定义(‘模块’,‘模块’);定义(‘动作’,‘动作’); IMO这是常量过度使用:如果“模块”或“动作”的概念被重新命名,则必须在整个代码中重命名,要么以字符串的形式,要么以常量的形式。此外,上面定义的常量名称没有特定的含义,更倾向于命名冲突/混淆。
  2. 初始代码示例: 如果(isset($_SESSION‘’unid‘)&isset($_SESSION’‘login’)){.} 由同事修改: 如果(isset($_SESSIONUNID) & isset($_SESSIONLOGIN)) {.} // +在constants.php文件中:定义(‘unid’,'unid');定义(‘登录’,‘登录’); 在我们的应用程序中,那些会话变量名称unid和login显然不太可能改变。尽管如此,如果声明常量确实是一个很好的实践,我会建议至少更精确的名称,例如FIELDNAME_UNID和FIELDNAME_LOGIN.

引入这些常量是否真的相关(也就是说,应该改进命名),还是(我猜)完全无用?

谢谢。

编辑

几个月后,以下是constants.php文件中的几行(难以置信)。我肯定发现这是一个完全无用的烂摊子,类似于这个DailyWTF帖子。太多的常量会杀死常量。

代码语言:javascript
复制
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.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-28 23:37:08

使用这样的常量有一个有效的论据。

如果你不小心做了这样的事:

代码语言:javascript
复制
$router->map('/some_url', array('moduel' => 'some_module', 'action' => 'some_action'));

它将以某种未定义的方式失败(注意拼写错误的"moduel")。

如果在涉及常量时出现拼写错误或错误,PHP会发出通知,然后立即捕获它。

究竟多久才能挽救你的生命,这是一个值得商榷的问题。就我个人而言,我通常不认为这是值得的麻烦。

票数 7
EN

Stack Overflow用户

发布于 2011-06-28 23:39:20

优势

  • 拼写错误的结果应该触发E_NOTICE‘使用未定义的常量’,而拼写错误的字符串文字不会提供这样的早期警告。
  • 如果遵循其逻辑结论,代码中任何剩余的字符串文本都应该是自然语言,因此识别要包装在国际化翻译层中的字符串的任务就容易了一些。

缺点

  • 需要定义所有常量,无论是否需要它们。除非您定义了成千上万的性能瓶颈,否则不太可能成为性能瓶颈!
票数 10
EN

Stack Overflow用户

发布于 2011-06-29 00:43:24

当然,主要原因是IDE自动完成。

使用常量,您甚至不需要编写常量的全名(IDE将在这方面对您有所帮助),并且您将绝对确定您没有输入。

这不是过度使用。例如,我试图避免在代码中使用字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6514260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档