PHP:具有全局命名空间的单个文件中的命名空间

发布于 2025-01-05 07:07:07 字数 733 浏览 1 评论 0原文

我有一个 require() 命名空间的文件,如下所示:

<?php
require_once('Beer.php');   // This file contains the Beer namespace

$foo = new Beer\Carlsburg();
?>

我想将 Beer 命名空间直接放在同一个文件中,就像这个(不起作用的)示例:

<?php
namespace Beer {
    class Carlsburg {}
}

$foo = new Beer\Carlsburg();
?>

但是,PHP 解释器抱怨 No code may exit命名空间之外。因此,我可以将 $foo 声明包装在命名空间中,但随后我还必须将 Beer 包装在该命名空间中才能访问它!这是我试图避免的一个工作示例:

<?php
namespace Main\Beer {
    class Carlsburg {}
}

namespace Main {
    $foo = new Beer\Carlsburg();
}
?>

有没有办法在文件中包含 Beer 命名空间的代码,但包装 $foo 在自己的命名空间中声明(将其保留在全局命名空间中)?

谢谢。

I have a file that require()'s a namespace, as such:

<?php
require_once('Beer.php');   // This file contains the Beer namespace

$foo = new Beer\Carlsburg();
?>

I would like to put the Beer namespace directly in the same file, like this (unworking) example:

<?php
namespace Beer {
    class Carlsburg {}
}

$foo = new Beer\Carlsburg();
?>

However, the PHP interpreter complains that No code may exist outside of namespace. I can therefore wrap $foo declaration in a namespace, but then I must also wrap Beer in that namespace to access it! Here is a working example of what I am trying to avoid:

<?php
namespace Main\Beer {
    class Carlsburg {}
}

namespace Main {
    $foo = new Beer\Carlsburg();
}
?>

Is there any way to include the code for the Beer namespace in the file, yet not wrap the $foo declaration in its own namespace (leave it in the global namespace)?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

玻璃人 2025-01-12 07:07:07

您应该使用全局命名空间:

<?php
namespace Beer {
    class Carlsburg {}
}


namespace { // global code
    $foo = new Beer\Carlsburg();
}
?>

请参阅此处 -> http://php.net/manual/en/language.namespaces.definitionmultiple.php

You should use the global namespace :

<?php
namespace Beer {
    class Carlsburg {}
}


namespace { // global code
    $foo = new Beer\Carlsburg();
}
?>

See here -> http://php.net/manual/en/language.namespaces.definitionmultiple.php

一城柳絮吹成雪 2025-01-12 07:07:07

尝试一下

namespace Beer {
  class Carlsburg {}
}

//global scope 
namespace {
  $foo = new Beer\Carlsburg();
}

在同一文件中定义多个命名空间

Try this

namespace Beer {
  class Carlsburg {}
}

//global scope 
namespace {
  $foo = new Beer\Carlsburg();
}

As per example #3 in Defining multiple namespaces in the same file

以歌曲疗慰 2025-01-12 07:07:07

尝试在命名空间名称之前放置一个反斜杠:

$beer = new \Beer\Carlsberg();

初始反斜杠被翻译为“全局命名空间”。如果不放置前导反斜杠,则类名将转换为当前命名空间。

Try placing a backslash before the namespace name:

$beer = new \Beer\Carlsberg();

The initial backslash is translated to "global namespace". If you do not put the leading backslash, the class name is translated to the current namespace.

醉态萌生 2025-01-12 07:07:07

只需编写它,它没有“名称”:

<?php
namespace Main\Beer {
    class Carlsburg {}
}

namespace {
    use Main\Beer;
    $foo = new Beer\Carlsburg();
}
?>

演示并查看在同一个文件中定义多个命名空间Docs

Just write it, it has no "name":

<?php
namespace Main\Beer {
    class Carlsburg {}
}

namespace {
    use Main\Beer;
    $foo = new Beer\Carlsburg();
}
?>

Demo and see Defining multiple namespaces in the same fileDocs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文