【问题标题】:php namespaces on the fly动态的php命名空间
【发布时间】:2010-12-23 13:33:09
【问题描述】:

我昨天问了一个关于命名空间的问题,得到了回答,所以我一直在等待。不过,我越深入这个东西,我就越意识到,我真的很希望能够即时生成命名空间。原因是,我有一个包含所有文件的插件目录。如果我公司的某人正在制作插件......或第三方,我不希望他们为命名空间而烦恼。我想通过目录结构动态生成命名空间。你说,“为什么不这样做!”好吧,我做到了,但我意识到我仍然有潜在的问题,即类被命名为相同的东西,命名空间可以解决这个问题。包也可以解决这个问题,但我找不到 php 支持它们。

-plugin
    -tabs
      +tabs.php
    -package
        -tabs
            +tabs.php

想法是能够通过 $tabs->func() 和 $package_tabs->func() 访问类;

同样,这不是问题,除了类被命名为同一个东西的可能性。

我有一个解决方法,但如果有人知道动态创建命名空间的解决方法,我会很感兴趣。

我看到的一个问题是 PHP 在“编译”时创建了命名空间。所以使用 fsocks 之类的东西来传递命名空间是失败的尝试。

【问题讨论】:

  • 很多框架都是这样做的,你有没有尝试过以 Kohana 为例?
  • 我们在谈论 PHP 5.3 命名空间吗?
  • @yoda:没有框架能做到这一点。使用 PHP 是不可能的,因为命名空间是在编译时扩展的。可以确定 命名空间(这是框架所做的),但不能即时更改/创建它们...
  • 您想通过动态命名空间选择加载吗?还是定义一个动态命名空间?
  • @ircmaxell,正在谈论分层数据,因为问题本身是不可能的。

标签: php namespaces


【解决方案1】:

不可能动态进行。正如您所提到的,PHP 在编译时扩展了框架,因此 PHP 本身无法修改它。

现在,您可以构建一个程序来“安装”这些脚本,方法是遍历目录结构并检查名称空间。如果没有找到,自动编辑文件并在顶部添加命名空间定义。但请注意,这会带来问题,因为使用的任何类都可能不是完全限定的(因此会在编译时抛出错误)。

所以最好的方法就是从一开始就开发带有命名空间的类。这并不难,而且可以很容易地记录下来......

【讨论】:

  • 好的。谢谢。真可惜。不过,对于那些没有被构建为完全合格的类确实有意义。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 2011-05-29
  • 2012-12-05
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2019-11-13
相关资源
最近更新 更多