PHP 命名空间和实现关键字

标签 php namespaces

use MyNamespace;

class NonPersistentStorage implements StorageInterface

两者都在 MyNamespace 中。然而,PHP 会查找 MyNamespace\NonPersistentStorage 和 StorageInterface(而不是 MyNamespace\StorageInterface)。我错过了什么吗?

最佳答案

PHP 命名空间的工作方式与其他语言略有不同。当你导入一个命名空间时,你并没有真正将类带入作用域,你只是给命名空间取别名。仅导入一级命名空间绝对没有任何作用。即使你导入了一些东西,你仍然需要引用它最底层的命名空间。

例如,如果你有这个:

foo.php:

namespace Bar\Baz\Biz;

class Foo
{}

以下是您如何使用它:

blah.php:
use Bar\Baz\Biz;

$var=new Biz\Foo();

看看我如何仍然需要使用 Biz 来引用它,即使我已经导入了它?

但是,您可以使用别名来解决这个问题:
blah.php:
use Bar\Baz\Biz\Foo as Foo;

$var=new Foo();

如您所见,我不再需要对其进行限定。

然而不幸的是,PHP 中没有“全部导入”;如果您想执行上述操作,则必须为要导入的每个类添加别名。

关于PHP 命名空间和实现关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261666/

相关文章:

php - git post-receive 钩子(Hook)在 php 中

php - 使用 openssl_encrypt 代替 Mcrypt 进行 3DES-ECB 加密

namespaces - 如何以编程方式从 Windows 手机发送带有附件的邮件?

c# - 如何在 Asp.Net c# 项目中使用命名空间?

ASP.NET System.Anything 未定义

python - __all__ 在 Python 中是什么意思?

php - PHP 会自动将数字转换为字符串吗?

php - 为什么这个 JOIN 效率低下?

javascript - 数据库更改后使用 Javascript 重新加载页面

namespaces - 我可以使用 Apache Drill 查询命名空间中的 hbase 表吗?