【问题标题】:PHP use namespace - A solution to including all classes under a namespacePHP 使用命名空间 - 将所有类包含在命名空间下的解决方案
【发布时间】: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()不起作用?跨度>

标签: php laravel namespaces php-7


【解决方案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 在哪里可以找到该类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2010-09-05
  • 2020-11-24
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多