加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP字符串常量过度使用?

发布时间:2020-12-13 16:32:36 所属栏目:PHP教程 来源:网络整理
导读:我有两个特殊情况,我不同意一个同事,是否应该使用常数. 我们使用一个大致像Symfony 1.x的自制框架. 初始代码是,在一个路由选择PHP配置文件中进行路由,就像这样: $router-map('/some_url',array('module' = 'some_module','action' = 'some_action'));$route
我有两个特殊情况,我不同意一个同事,是否应该使用常数.

我们使用一个大致像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会发出通知,并立即抓住.

实际上节省你的频率是一个辩论的问题.就个人而言,我通常不认为这是值得的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读