谢谢你的好问题。令我彻底失望的是,这样的问题在这个网站上极为罕见。
对此有什么简化吗?
当然。
这称为“编程”。
虽然对于普通的 PHP 用户来说,编程代表只是将几个预定义的块放在一起,就像乐高积木一样,但实际上编程更多地代表发明,创造新的东西。优化同样如此,为相同的动作采取更少的动作。
程序员总是可以创建一个函数来封装重复的任务。最终他可能希望将这些函数放在一个类中,但这不是重点。
如您所见,您的大多数操作员只是重复操作员。每次看到重复时,您肯定知道可能有一个函数或至少一个循环。
这是您使用我的编程尝试的代码,旨在(除了额外的安全性)非常代码缩短:
$name = $this->link->getOne('SELECT avatar FROM test WHERE id = ?i', $id)
unlink($name);
$this->link->query('DELETE FROM test WHERE id = ?i', $id);
如您所见,此代码是 Extra DRY(代表 Don't Repeat Yourself)——所有重复的代码都被带入内部。
好吧,如你所见,我的课程是建立在 mysqli 之上的。但当然,即使使用丑陋的 PDO,也可以使用我最近发布的一种包装器来完成类似的操作:
$name = $this->link->query('SELECT avatar FROM test WHERE id = ?', [$id], "one");
unlink($name);
$this->link->query('DELETE FROM test WHERE id = ?', [$id]);
顺便说一句,稍微进一步编程,您可能会进一步缩短此代码:
unlink($avatar_dir.$id.".png");
$query = $this->link->query('DELETE FROM test WHERE id = ?i', $id);
作为头像图像显然不需要专门的名称,就id
可以完美地服务,为您节省数据库中的额外字段和额外的查询。所有头像可以在上传时转换为单一格式,更加减少头痛。