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


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

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

OOP
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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年前 评论

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