> 백엔드 개발 > PHP 튜토리얼 > 评价一上,小弟我写的oop

评价一上,小弟我写的oop

WBOY
풀어 주다: 2016-06-13 11:08:23
원래의
1161명이 탐색했습니다.

评价一下,我写的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 />?>
로그인 후 복사

------解决方案--------------------
感觉连接数据库不应该和数据访问层卸载一起吧,那样如果你要是访问别的数据库的话,这个类还得修改,所以还是应该单独提出来,这样后期就不用修改数据访问层了,直接改configuration就可以了。
if(!$this->conn->query($sql)){
            return false;
        }else{
             return true;
         }
这个好像也可以单独拿出来写成一个function吧。
------解决方案--------------------
第一:$conn这个连接应该修饰符为private(封装性)
第二:组织sql语句应该放在逻辑层(按照MVC设计模式)
第三:对数据库的操作的类,一般写一个dml(修改),dql(查询)两个函数。所以你的那个getAll不应该写在这个类中(我一般写代码这个类喜欢叫SqlHelper.class.php,里面写一个execute_dml函数,和一个execute_dql函数,构造函数用于连接数据库)
呵呵!!!我也是刚刚学PHP,菜鸟一个。以上只是我个人见解,不知道对还是不对。。。
------解决方案--------------------
首先呢, 这个OO的设计, 没法绝对地说这个好还是那样好, 一个类提供的接口应该是根据需求决定的, 如何划分类的功能也是根据需求来决定, 所以别人也没法凭空判断. 
比如说你这个类, 有insert, 有query(getAll), 没看见update, 要么是你没贴全, 但是如果你的应用目前和将来都不需要update, 那没有也没什么错. 

随便说点细节上的东西:
1. 'SET NAMES UTF8' 没必要在getAll里, 连接后运行一次即可.
2. $this->conn->query和mysqli_query混用, 统一比较好看
3. delete($table,$condition="")和getAll($sql), 接口不一致, 使用你这个类的会比较头疼
4. mysqli_connect和$this->conn->query之后都最好检查错误
.....
x. 代码没贴全: $this->halt是什么?

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿