我是编程特别是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");
}
答案 0 :(得分:3)
所有这些都是错误的,因为你没有清理$id
,如果它是一个int,你的函数的第一行应该是:
$id = (int) $id;
如果它应该是其他任何东西:
$id = $this->database->whateveryourescapefunctioniscalled($id);
现在,问你真正的问题。 1和2的优点是,如果您的数据库函数返回的不是用户(某些函数在失败时返回false),您可以通过某种方式在此函数中处理它。在#3中,无论何时拨打getUser
,都必须处理它。这将变成一团糟。如果你的查询变得更长(需要连接等),你可能会想要更像1的东西,但在那之前,2可以。如果你不关心或者不需要在这里处理失败的查询案例,即使是3也没关系。
答案 1 :(得分:-1)
基于这三个例子,就OOP而言,没有太多可说的。您应该了解CLASS的IDEA是什么。课程围绕一个核心概念,或想法或主题。然后,类字段是描述该主题的那些属性。例如,如果您有一个表示坐标系中某个点的类,则x和y坐标的属性是该类的自然属性。我想说的是,面向对象是基于某些原则(许多人似乎都错过了)。它不是用两行代码写一些代码。