ホームページ  >  記事  >  バックエンド開発  >  最初のコメント、おっと書きました

最初のコメント、おっと書きました

WBOY
WBOYオリジナル
2016-06-13 12:58:24769ブラウズ

私の書いたoopを評価してください
ありがとうございます、データベースに接続するクラスです

<?php<br />
class db{<br />
	public $conn;<br />
	function __construct(){<br />
		$this->conn=mysqli_connect('localhost','root','123123','air');<br />
		//$this->conn->query('SET NAMES UTF8');<br />
		mysqli_query($this->conn,'SET NAMES UTF8');<br />
	}<br />
	public function delete($table,$condition=""){<br />
        if(empty($condition)) {<br />
            $this->halt('没有设置删除的条件');<br />
            return false;<br />
        }<br />
        $sql = "delete from ".$table." where 1=1 and ".$condition;<br />
        if(!$this->conn->query($sql)){<br />
        	return false;<br />
        }else{<br />
       		return true;<br />
       	}//if<br />
    }<br />
      public function getAll($sql){//输出数组所有<br />
        $rt=array();<br />
		$q=$this->conn->query($sql);<br />
		$this->conn->query('SET NAMES UTF8');<br />
		while($r=$q->fetch_array(MYSQLI_USE_RESULT)){<br />
			$rt[]=$r;<br />
		}<br />
		return $rt;    	<br />
    }  <br />
	public function __destruct(){<br />
		mysqli_close($this->conn);<br />
    }<br />
}//db<br />
?>

-----解決策--------------------------------
データベースへの接続はデータと関係させるべきではないと思います アクセス層も一緒にアンインストールしてください、他のデータベースにアクセスする場合はこのクラスを変更する必要があるので、別途提案する必要があります。後でデータ アクセス層を変更する必要はなく、構成を直接変更するだけです。
if(!$this->conn->query($sql)){
return false;
}その他{
return true;
}
これを個別に取り出して関数として書くこともできるようです。
------解決策----------------------
最初: $conn はこの接続の修飾子である必要がありますプライベート用 (カプセル化)
2 番目: 整理した SQL ステートメントは (MVC 設計パターンに従って) 論理層に配置する必要があります
3 番目: データベース操作クラスの場合は、通常、dml (変更) と dql (クエリ) の 2 つの関数を作成します。したがって、getAll はこのクラスに記述すべきではありません (私は通常、コードを記述するときにこのクラス SqlHelper.class.php を呼び出し、その中にexecute_dml 関数とexecute_dql 関数を記述します。コンストラクターはデータベースへの接続に使用されます)。 🎜> ふふ! ! !私はPHPを学んだばかりの初心者です。上記はあくまで個人的な意見ですので、正しいか間違っているかはわかりません。 。 。

------解決策----------------------まず第一に、このOOデザインは絶対に不可能です、これが良いのか、あれが良いのか、クラスが提供するインターフェースはニーズに基づいて決定されるべきであり、クラスの機能をどのように分割するかもニーズに基づいて決定されるため、他人がそれを無意に判断することはできません。 🎜> たとえば、クラスには insert と query(getAll) がありますが、update が表示されないか、それらをすべてポストしていないとします。ただし、アプリケーションが現在または将来的に更新する必要がない場合は、更新しなくても問題はありません。それを持っています

詳細を教えてください:
1. 「SET NAMES UTF8」を getAll に含める必要はありません。接続後に 1 回実行するだけです。
2. $this->conn->query と mysqli_query を混合し、統一したほうが見栄えがよくなります
3. delete($table,$condition="") と getAll($sql) のインターフェイスに一貫性がないため、クラスを使用する人にとっては頭痛の種になります
。 4. mysqli_connect と $this->conn->query
の後でエラーをチェックするのが最善です ......
x. コード全体は掲載されていません: $this->halt とは何ですか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。