我是名称空间的新手,想了解为什么我的代码无法按预期工作。我有一个基本的身份验证类,它依赖于用户的核心模型:
<?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
。
有什么问题吗?
答案 0 :(得分:2)
是的,确实不能覆盖另一个文件中的名称空间别名。
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
别名仅在它们写入的文件内有效。您当然不能覆盖另一个文件的别名。否则,由于潜在的名称冲突,您将不信任在任何文件中编写的任何代码,而这正是命名空间试图避免的。