0

私はプログラミング、特に OOP に本当に慣れていないので、どうすればこの種の関数を正しく記述できるのだろうか?

ベストプラクティスはありますか? コードの可読性にもよるかもしれませんが、どちらが良いのかわかりませんか?個人的には3番目の方が好きですが、「正しい」方法を学びたいです...

// 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

サニタイズしなかったため、これらはすべて間違っています。int$idであることが意図されている場合、関数の最初の行は次のようになります。

$id = (int) $id;

それ以外の場合は、次のようにする必要があります。

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

さて、あなたの本当の質問に。1と2には、データベース関数がユーザー以外のものを返す場合(一部の関数は失敗時にfalseを返す)、この関数でそれを処理する方法があるという利点があります。#3では、どこに電話をかけてもそれを処理する必要がありますgetUser。これは混乱に変わります。クエリが長くなる場合(結合が必要など)、おそらく1のようなものが必要になりますが、それまでは2で十分です。ここで失敗したクエリケースを気にしない、または処理する必要がない場合は、3でも問題ありません。

于 2012-05-31T08:24:33.223 に答える
-1

3 つの例に基づいて、OOP に関して言うべきことはあまりありません。CLASS の IDEA が何であるかを理解する必要があります。クラスは、中心的な概念、アイデア、または主題を中心に展開します。次に、クラス フィールドは、その主題を説明する属性です。たとえば、座標系の点を表すクラスがある場合、x 座標と y 座標の属性はそのクラスの自然な属性です。私が言おうとしているのは、オブジェクト指向は特定の原則に基づいているということです (多くの人が見逃しているようです)。コードを 2 行と 1 行で書くということではありません。

于 2012-06-01T01:55:23.450 に答える