【发布时间】:2013-11-22 07:23:09
【问题描述】:
这是场景。
我正在我的项目中实现命名空间。
我有自己的自定义桥接库,可以调用 Zend 等其他库来完成繁重的工作。
在我的自定义桥接库中使用完全限定的命名空间没有问题,但我希望在我的控制器、模型和视图中保持代码尽可能简洁。
这是我想使用的一些别名的示例:
use BridgeLibName\Stdlib\Arrays as arr;
use BridgeLibName\Stdlib\Objects as obj;
use BridgeLibName\Stdlib\Strings as str;
use BridgeLibName\Stdlib\Numbers as num;
use BridgeLibName\Stdlib\File as file;
etc.........
示例用法:
$file = new file('path/to/file.txt');
$file->create();
或
$obj = arr::toObject(['key1'=>'value1']);
是否可以通过任何方式创建可全局访问且不会在每个文件末尾丢弃的别名或常量?
某种可以使这些别名保持不变的引导文件。
【问题讨论】:
-
不,你不能(至少不是理智的方式)。
-
如果用假类引用,效果很好。不过在实施时必须非常小心。
-
使用“假”类是解决非问题恕我直言的可怕解决方案。
-
我同意这是一个糟糕的解决方案。但是,如果可以用 3 个字符完成,写出 20+ 个字符就更糟了。这使我的代码臃肿且不可读。如果仔细使用,我认为它会非常有用。只要您从未在库中实现它,而只是将其保留在您的应用程序中。编写 BridgeLibName\Stdlib\Arrays::inArray() 与 arr::inArray() 是一个问题。如果根命名空间因某种原因发生更改,这将很难在全局范围内修复。每个控制器或模型文件中的别名都会产生相同的问题。
-
如果某些东西以您喜欢的方式对您有用。不要让intarnet上的一些随机人告诉你。如果你后来在这个过程中失败了,或者你后来改变了主意,这两种方式都是进步。
标签: php namespaces global-namespace namespace-organisation