PHP类属性包含父类的子类,但由于父类不包含子类的方法而显示错误



我现在正在学习OOP,我有一个属性,指定它应该是什么类。

class Controller{
public ?Model $model;
}
class LoginModel extends Model{
public function login(){}
}

现在,我想加载一个继承了Model的类,但包含了一个不来自Model的唯一方法。这会导致lint认为代码中存在错误。是否有办法解决控制器模型的问题?

$controller = new Controller();
$controller->model = new LoginModel();
echo $controller->model->login();

我知道一种方法是我们可以将Model更改为LoginModel,但如果有很多不同的控制器,具有不同的模型,设计用于做不同的事情,那将是乏味的。

考虑这个例子

class Controller
{
public ?Model $model;
}
class Model { }
class LoginModel extends Model
{
public function login() { }
}
class LogoutModel extends Model { }

$controller = new Controller();
$controller->model = new LoginModel();
$controller->model->login(); //This works 
$controller->model = new LogoutModel();
$controller->model->login(); //This doesn't works

这个lint是你不能保证会有一个login()调用。所以除非你在所有模型中都有一个login()方法,在这种情况下,你可以定义一个抽象或接口,否则因为它可能失败,它会显示你的错误。

PS:有一种方法可以绕过它,但我不建议经常使用它。

if($controller->model instanceof LoginModel) 
{
$controller->model->login(); //This works
}

相关内容

  • 没有找到相关文章