私の書いた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 とは何ですか?