gpt4 book ai didi

PHP 命名空间错误?

转载 作者:可可西里 更新时间:2023-11-01 12:53:16 25 4
gpt4 key购买 nike

PHP 5.6

这段代码:

<?php

namespace Database
{
abstract class Model
{

}
}

namespace Models
{
use Database\Model as DbModel;

class Model extends DbModel
{

}
}

namespace Models
{
use Database\Model;

class Brand extends Model
{

}
}

namespace
{
$m = new \Models\Model();
}

导致错误:

"Fatal error: Cannot use Database\Model as Model because the name is already in use in D:\OpenServer\domains\localhost\index.php on line 23".

这段代码:

<?php

namespace Models
{
use Database\Model as DbModel;

class Model extends DbModel
{

}
}

namespace Models
{
use Database\Model;

class Brand extends Model
{

}
}

namespace Database
{
abstract class Model
{

}
}


namespace
{
$m = new \Models\Model();
}

没有错误。

为什么会这样?因为代码没有改。

最佳答案

命名空间子句的顺序在这里有所不同;在第一个示例中,Database 命名空间子句声明在定义类 Models\Model 的子句之前

可以在 documentation 中找到该差异的类似示例。 :

(...) However, the next example causes a fatal error on name conflict because MyClass is defined in the same file as the use statement.

通过将 Database 命名空间分别移到下方或上方来模拟单独的文件或相同的文件。

也就是说,文档还 states :

It is strongly discouraged as a coding practice to combine multiple namespaces into the same file. The primary use case is to combine multiple PHP scripts into the same file.

更新

有趣的是,这个问题是 Drupal 8 开发人员最近遇到的问题 found out同样,但是根据这个 bug report两年多前就有报道了。

A pull request已提交以在下一个主要版本中解决此问题(它也可能被移植回 5.x)。

关于PHP 命名空间错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com