PHP中抽象类的子类中的Typesafe / Type提示

 雪狱冰魂_520 发布于 2023-02-12 21:00

我正在建立一个继承的框架的新部分。这是真正实施一些最佳实践的机会,因此我正在尝试做尽可能多的事情。

该框架在php5.4(Windows环境)中运行。

我已经建立了一个抽象类BaseModel。在本文中,我定义了几个核心功能,例如:通用访问器和通用数据库交互。

然后,我将其扩展以创建将要使用的模型。在测试用例中,文件“ UserModel”创建一个名为“ User”的类。

在BaseModel中,我正在创建以下抽象函数:

abstract public function getById($id);

然后在UserModel中定义此功能

public function getById($id)
{
    // just a test!
    return 'this works!';
}

我想强制执行类型安全。但是,如果我做这样的事情,我会出错:

public function getById(User $id)
{
    // just a test!
    return 'this works!';
}

我可以做到以下几点

abstract public function getById(BaseModel $id);

public function getById(BaseModel $id)
{
    // just a test!
    return 'this works!';
}

哪个可行,但说实话也没那么有用。User是BaseModel类型的,但其他所有扩展类也是。我想做的是这样的:

abstract public function getById(BaseModel $id);

public function persist(User $item)
{
    // just a test!
    return 'this works!';
}

我知道我可以在这些行中添加一条手动进行typeafing的行(伪代码)

if ($item instanceof User)
{
//do stuff
}

但是,这似乎是一种解决方法,而不是找到真正的方法。

我有种下沉的感觉,这种“智能/感知类”功能在php中不可用。

任何人都可以确认/否认这一点或提供更优雅的解决方法吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有