PHP中的嵌套名称空间

PHP中的嵌套名称空间,php,namespaces,Php,Namespaces,因此,我将我的编译器定位于PHP,我在名称空间方面遇到了一些问题 在我的语言中,它们看起来像这样: package Foo { package Bar { class X { } } class Y { } } 当然,PHP不处理嵌套的名称空间。翻译此代码以使其在PHP中仍然有效的最佳方法是什么 我应该注意到,所有文件最终都被编译成一个PHP文件。需要注意的一点是,在关闭包之后,我必须返回全局名称空间,而我还没有找到任何关于如何执行此操作的文档

因此,我将我的编译器定位于PHP,我在名称空间方面遇到了一些问题

在我的语言中,它们看起来像这样:

package Foo
{
    package Bar
    {
        class X { }
    }

    class Y { }
}
当然,PHP不处理嵌套的名称空间。翻译此代码以使其在PHP中仍然有效的最佳方法是什么

我应该注意到,所有文件最终都被编译成一个PHP文件。需要注意的一点是,在关闭包之后,我必须返回全局名称空间,而我还没有找到任何关于如何执行此操作的文档。在我看来,在PHP中,一旦声明名称空间,它就会应用于整个文件。

的确,“名称空间声明不能嵌套”.namespace用于避免定义冲突,并在代码中引入更大的灵活性和组织性。围绕命名空间代码块的括号是完全可选的。如果要将代码转换为可在php中运行。你可以这样写:

namespace Foo\Bar;

class X{
    // Your properties
}
class Y {
// Your properties
}

如果您需要更多信息,可以查看Elias Zerrouq编写的带有示例的链接

Zotoaster,您完全可以随心所欲;然而,我的解决方案将依赖于psr-4自动加载解决方案。这样,通过将文件放在适当的文件夹中,您可以在php文件开始时执行以下操作:

use Foo\Bar\X;
use Foo\Y;
此后,您可以相应地实例化这些类:

$x = new X();
$y = new Y();
您可以在此处阅读有关如何使用名称空间的更多信息:
此外,您可以使用composer为您处理“脏活”,即所有的自动加载:

好的,所以我没有一个完美的解决方案,可能其他人会寻找,但我有一些工作。显然,编译后的代码不必精确地表示源代码,也不必完全可读,因此我决定最简单的解决方案是将名称空间嵌入类本身,即类Foo_ubar_ux{}class Foo_Y{}$f=new Foo_ubar_ux();它是有效的,它很简单,我不需要完全重新安排类的编译顺序。从这里,您将知道在第一个类之后要编写的类的别名/导入。