在PHP中替换静态值集的最佳方法是什么

时间:2014-01-24 20:30:06

标签: php

静力学,竞争和单身被认为是一种不好的做法,因为它们阻碍了测试,并且由于各个地方的参考而产生了维护问题。在网站的迷你框架中,我遇到了这些问题并想要替换静态,但在一个用例中不知道最佳替代方案。

此用例由基于组的权限系统说明:要使客户端C能够访问数据项X,C的授权组名称数组中的组名必须与X的“必需”名称数组中的一个匹配。

比较(“客户端是否具有此身份验证?”)可以轻松地抽象为动态调用。但是,当为一个客户端分配一个组名,或者在一个数据项上分配一个“必需的”组名时,我怎么能单独引用它们并且警告每个都来自一个集中定义的组,没有静态?

目前的代码如下:

$client->appendAuzGroupName( Tokens::AUZ_GRP_PUBLIC );

- 令牌在每次缓存刷新时从配置文件加载值。

在这里和网上搜索已经提出了很多针对static / const / singleton的建议,但我在更换它们时发现的唯一想法是“使用IoC / DI”。但是,通过params获取这些值只会将问题移到代码中的不同位置。

我愿意改用另一个身份验证系统设计,但它必须具有这种级别的粒度,并且列出用户名(ACL设计)似乎不太可能在规模上实用。

1 个答案:

答案 0 :(得分:0)

好的,我可能已经解决了我自己的问题。

  1. 类标记将具有公共构造函数,来自XML的值的私有静态数组(由管理界面编写),用于检索它们的公共方法;如果它们尚未加载,它会在实例化时加载值。

  2. 从Tokens收集值的子集的一些小工具,例如授权组名称列表,并传递包含它们的对象(类TokenSet等)

  3. 这些“值集”在函数调用中传递,例如为管理界面提供一组选项,以应用于每个新页面的“必需”权限级别。

  4. 因此,不是直接访问存储在内存中的值,而是需要使用它们的对象将获得包含相关集合的对象作为参数。这将是可测试的,并避免硬编码引用会产生依赖性和维护问题。