我对编程,尤其是OOP真的很陌生,我想知道如何正确编写这种函数?
是否有最佳实践?也许这取决于代码的可读性,但我不知道哪个更好?就个人而言,我更喜欢第三个,但我想学习"正确"的方式......
// Version #1
public function getUser( $id )
{
$sql = "SELECT * FROM users WHERE id=$id";
$user = $this->database->query($sql);
return $user;
}
// Version #2
public function getUser( $id )
{
$user = $this->database->query("SELECT * FROM users WHERE id=$id");
return $user;
}
// Version #3
public function getUser( $id )
{
return $this->database->query("SELECT * FROM users WHERE id=$id");
}
所有这些都是错误的,因为你没有清理$id
,如果它意味着一个整数,你的函数的第一行应该是:
$id = (int) $id;
如果是其他任何东西,它应该是:
$id = $this->database->whateveryourescapefunctioniscalled($id);
现在,对于您的真正问题。 1 和 2 的优点是,如果您的数据库函数返回用户以外的内容(某些函数在失败时返回 false),则您有某种方法在此函数中处理它。在#3中,您必须在任何地方处理它 getUser
.这将变成一团糟。如果你的查询变得更长(需要连接等),你可能想要更像 1 的东西,但在那之前,2 很好。如果您不关心或不需要在此处处理失败的查询情况,即使 3 也可以。
基于这三个例子,在OOP方面没有太多可说的。你应该明白CLASS的想法是什么。课程围绕一个中心概念、想法或主题展开。然后,类字段是描述该主题的属性。例如,如果有一个表示坐标系中点的类,则 x 和 y 坐标的属性是该类的自然属性。我想说的是,面向对象是基于某些原则(许多人似乎忽略了这些原则)。它不是在两行而不是一行中编写一些代码。