依赖注入 (dependency injection) 是实现控制反转的一种技术,顾名思义,就是将依赖 (被调用者) 注入给依赖对象 (调用者)。

用户类 User 有一个注册方法,我们需要实现一个功能,在注册成功后,给用户发送一封邮件通知。我们先写一个发送邮件的类:

1
2
3
4
5
6
7
class EmailClass
{
public function sendEmail($username, $email)
{
print_r("send register email to:" . $email . PHP_EOL);
}
}

然后在用户注册方法中实例化一个邮件类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class User
{
private $username;
private $password;
private $mobile;
private $email;

public function register()
{
// 注册逻辑
// .........

// 发送邮件逻辑
$emailClass = new EmailClass();
$emailClass->sendEmail($this->username, $this->email);
}
}

这时候又来一个需求,需要在注册成功之后给用户发送短信,于是又要在注册方法里面实例化一个发送短信的类。或者这个时候我们要改一下邮件内容,要把注册密码发给用户,于是我们要给 EmailClass::sendEmail 加一个 password 参数。经过长期迭代和添油加醋,我们需要频繁的去修改核心注册逻辑,最终的注册方法将变得极为臃肿且难以维护。

阅读全文 »

项目开发时发现几个小数组成的数组进行求和的结果不对,第一反应就觉得是精度问题,于是做了实验:

1
2
3
4
5
$array = [0.4, 0.4, 0.2, 0.4, 0.4, 0.2];
$arraySum = array_sum($array);
var_dump($arraySum);
var_dump(intval($arraySum));
var_export($arraySum);

猜猜以上代码运行的结果是什么?

阅读全文 »

写博客时遇到了上传图片的需求,于是找到了 markdown-image 这个 VSCode 插件,可以直接把剪切板图片存入本地指定目录 (也可以根据自己需求上传到其他云服务器,详情可见插件文档说明),并自动生成 md 引用图片的语法。

阅读全文 »

是的,我又挖新坑了…

框架用的 Hexo,主题 NexT

总之,以后就在这里记录我日常的工作和生活吧…

0%