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 使用命名空间 - 将所有类包含在命名空间下的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

命名空间

命名空间

TP框架 命名空间 与第三方类

C# 常用 命名空间都有哪些 这些命名空间是的作用是?

php使用命名空间时自动加载机制

类文件如何使用命名空间和使用包含在另一个文件 php 中?