PHP 使用命名空间 - 将所有类包含在命名空间下的解决方案
Posted
技术标签:
【中文标题】PHP 使用命名空间 - 将所有类包含在命名空间下的解决方案【英文标题】:PHP use namespace - A solution to including all classes under a namespace 【发布时间】:2015-07-08 20:36:14 【问题描述】:是否有解决方案可以将所有类单独包含在一个命名空间下?
我的 Laravel 文件变得越来越大,因为我必须不断包含大量的命名空间......这太糟糕了!
作为临时解决方案,为什么以下方法可能不起作用:
命名空间.Blah.txt:
use Blah\Blah;
use Blah\Bloh;
php代码:
eval( file_get_contents( "namespace.Blah.txt" );
如果我可以让它工作,我可以评估一个文件的内容...我明白这有点菜鸟...但是...该死的!
【问题讨论】:
就像自动加载具有特定命名空间的所有类一样? 我们讨论了多少个包含的类? 目前我有大约 20 节课。我几乎必须将所有这些都包含在每个控制器中......我真的不那么在意为类声明内存,因为它们很小......而且它们永远不会自动实例化,因此永远不会被填充。目前这对我来说不是问题......如果它变成一个,我会回到旧的方式......但我不明白为什么eval()
不起作用?跨度>
【参考方案1】:
没有,但在 PHP 7 中你可以
use FooLibrary\Bar\Baz\ ClassA, ClassB, ClassC, ClassD as Fizbo ;
以下 RFC 已通过:
https://wiki.php.net/rfc/group_use_declarations
编辑:
请注意,在一个类中使用过多可能是“气味”的标志。那个特定的班级是不是做得太多了?您不应该创建新的“基”类并扩展它们吗?
【讨论】:
谢谢你,我想知道你是否知道我是否能做到以上(评估)......我知道这很可怕......但我很绝望!如果它变成菜鸟,它可以在某个时候改变! 一个类中使用过多可能是“臭”的标志。那个特定的班级是不是做得太多了?你不应该创建新的“基”类并扩展它们吗? 我很确定 eval 在这种情况下不会起作用,因为使用是由编译器处理的。这只是提示编译器知道在哪里可以找到类,因此如果您从其他地方执行使用,它将不适用于您当前的类。 哈。谢谢你的提示。任何想法为什么你不能评估 use 关键字? 因为它不是真正的评估,它只是一个提示。您可以将use Foo; Foo::whatever()
替换为\Foo::whatever();
,因此只需告诉PHP 在哪里可以找到该类。以上是关于PHP 使用命名空间 - 将所有类包含在命名空间下的解决方案的主要内容,如果未能解决你的问题,请参考以下文章