0

我对编程特别是 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");
}
4

2 回答 2

3

所有这些都是错误的,因为你没有 sanitize $id,如果它是一个 int ,你的函数的第一行应该是:

$id = (int) $id;

如果是别的,它应该是:

$id = $this->database->whateveryourescapefunctioniscalled($id);

现在,你真正的问题。1 和 2 的优点是,如果您的数据库函数返回用户以外的其他内容(某些函数在失败时返回 false),您可以在此函数中处理它。在 #3 中,您必须在任何地方处理它getUser。这将变成一团糟。如果您的查询变得更长(需要连接等),您可能需要更像 1 的东西,但在那之前,2 很好。如果您不关心或不需要在这里处理失败的查询案例,即使 3 也可以。

于 2012-05-31T08:24:33.223 回答
-1

基于这三个例子,OOP 方面就没什么好说的了。你应该明白 CLASS 的 IDEA 是什么。课程围绕一个中心概念、想法或主题展开。然后,类字段是描述该主题的那些属性。例如,如果您有一个类表示坐标系中的一个点,那么 x 和 y 坐标的属性就是该类的自然属性。我想说的是,面向对象基于某些原则(许多人似乎忽略了这些原则)。这不是在两行与一行中编写一些代码。

于 2012-06-01T01:55:23.450 回答