php - 在另一个文件中引用类\方法的正确方法
问题描述
我有这样设置的课程:
use MVC\Model;
use \Firebase\JWT\JWT;
class ModelsAuth extends Model {
在我的ModelsAuth
课堂上,我有这个成员函数:
public function validateToken($token) {
}
我正在使用它来自动加载我的课程:
// autoload class
function autoload($class) {
// set file class
$file = SYSTEM . str_replace('\\', '/', $class) . '.php';
if (file_exists($file))
require_once $file;
else
throw new Exception(sprintf('Class { %s } Not Found!', $class));
}
// set autoload function
spl_autoload_register('autoload');
是否可以从类外调用这个类和函数?
我努力了:
$authorization = new \MVC\Model\ModelsAuth();
$authorization->validateToken($token);
和
$authorization = MVC\Model\ModelsAuth::validateToken($token);
两者都返回一个类未找到错误。
有什么想法我可能用这种方法做错了吗?
解决方案
你还没有为你的类声明一个命名空间,所以不清楚它是否会存在MVC\Model\ModelsAuth
,它可能只是作为\ModelsAuth
. 你可能想要这样的东西:
namespace MVC\Model;
class ModelsAuth extends \MVC\Model {
...
}
也可以指定为:
namespace MVC\Model;
use MVC\Model;
class ModelsAuth extends Model {
...
}
但是,我不喜欢这些选项中的任何一个,因为这样您就有了一个名为的基类\MVC\Model
和一个名为 的命名空间\MVC\Model
,这有点令人困惑。我建议将您的基类作为抽象放入\MVC\Model
命名空间中,在一个如下命名的文件中MVC/Model/AbstractModel.php
:
namespace MVC\Model;
abstract class AbstractModel {
...
}
然后你的模型在一个MVC/Model/MyModel.php
像这样的文件名中:
namespace MVC\Model;
class MyModel extends AbstractModel {
...
}
这样,您的所有模型都在同一个命名空间和同一个目录中。
此外,如果您使用PSR-4自动加载器,那么大多数此类问题都会消失。
推荐阅读
- amazon-web-services - 使用 Java TrustStore 配置 AWS API Gateway 客户端证书以验证传入请求
- nginx - Nginx 如果 cookie 存在不同的位置
- javascript - 可以使用 WASM 来检查 JS 方法的完整性吗?
- reactjs - 使用 reactJS 中的变量将值设置为嵌套状态
- ios - 如何在 Swift4 中返回受线程影响的值
- microsoft-dynamics - 服务主体名称(委托)配置设置不正确(Ms Dynamics NAV)
- php - 致命错误:未捕获的错误:在 null 上调用成员函数 dbConnect()
- c - gst-rtsp-server gst_rtsp_client_close
- python-3.x - youtube api returns copyright free videos as copyrighted
- vba - Get a unique combination from a Table Column using Excel VBA