php - 命名空间和扩展类

标签 php namespaces php-7

我是命名空间的新手,想了解为什么我的代码没有按预期工作。我有一个依赖于用户核心模型的基本身份验证类:

<?php
namespace Core\Auth;
use Core\Component;
use Core\Models\Users;

class Auth extends Component {
    public function __construct($options) {
        // do something
    }

    public function login($email, $password) {
        $user = Users::findByEmail($email);
        // do a lot more
    }
}

对于使用此核心的项目,我必须修改用户模型,因此我扩展了核心身份验证类:
<?php
namespace App\Auth;
use Core\Auth\Auth as Base;
use App\Models\Users;

class Auth extends Base {}

但是当实例化类时 \App\Auth\Auth好像用了 \Core\Models\Users而不是 \App\Models\Users .
问题是什么?

最佳答案

是的,确实,您不能覆盖另一个文件中的命名空间别名。
use语句只建立别名。他们不加载代码或其他任何东西。

use Core\Models\Users;

...

public function login($email, $password) {
    $user = Users::findByEmail($email);
}

这完全等同于:
public function login($email, $password) {
    $user = \Core\Models\Users::findByEmail($email);
}

use别名仅在它们写入的文件内有效。您肯定不能覆盖另一个文件的别名。否则,由于名称冲突的可能性,您无法信任您在任何文件中编写的任何代码,而这正是命名空间试图避免的。

关于php - 命名空间和扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647338/

相关文章:

php - 帮助在 mysql 中加入 JOIN

html - CSS 样式冲突预防和命名空间技术

.net-2.0 - 在 .net 2.0 中使用 .net 3.0 命名空间

ruby-on-rails - Rails - 如何在 View 中引用命名空间表属性

Ubuntu 20.04、PHP 7.4 : mbstring installed but not enabled

php - 如何在 Mamp 中添加 php 7.0.0 RC2?

javascript - AES 加密 PHP 到 NodeJS?

PHP fatal error : Uncaught Error: Cannot access property started with '\\0'

php - 如何向MySQL数据库插入微秒?

php - Laravel 任意将退出状态码设置为自定义命令