关于oop和数据库的一些疑惑


问题一:如图使用了Visit 这个类,怎么赋值呢?new 的话还是会出现很多参数的问题呀

问题二:如果Visit 有一个字段跟Log模型关联,是在方法里面获取Visit 还是在控制器找到Visit再通过参数的形式穿进来呢?

OOP
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

file

最近怎么看什么都感觉像是在看 Java 了 :scream:

3年前 评论
kolin 3年前
reiz568569 (楼主) 3年前

我猜图里的目的是让你不要给方法传递太多的参数,应该使用下面那种先把需要的参数设置好了直接把整个实体类传过去

3年前 评论
aab 3年前
reiz568569 (楼主) 3年前

这个和IoC感觉一个东西?即传入这个类的时候,这个类的成员变量应该通过其它方式已经赋予值了。

3年前 评论
reiz568569 (楼主) 3年前
ononl (作者) 3年前

用 PHP 8.1 哈哈,8.0 开始有了命名参数,而且还支持直接在构造函数定义属性,写起来就像这样。

class Visit
{
    public function __construct(
        public int $id,
        public ?string $name,
        public string $url,
    ) {
    }
}

8.1 开始有了 readonly,加上 readonly 还可以避免被外部修改了。

class Visit
{
    public function __construct(
        readonly public int $id,
        readonly public ?string $name,
        readonly public string $url,
    ) {
    }
}

要构建的时候,使用命名参数也可以更方便跳过一些默认参数

$visit = new Visit(id: 1, url: 'https://abc.com');

旧版的,可以用 getter/setter ,或者写一些 factory 方法来创建实例之类的。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!