A. php 類的寫法有點不明白,對於php面向對象還是不太理解
query方法里邊,因為你給的不全,沒法判斷是你寫的究竟是什麼$re沒在上文中出現這個變數,只有一個$rs,不知道是不是這個?
PHP類,成員有屬性和方法,需要加訪問修飾限定符如 public private protected等,如:
class person{
private $name;
public function say(){
echo 'hello';
}
}
訪問對象屬性石必須先對象再屬性,
常量,和靜態成員就用類名屬性,或者方法名訪問
這是個操作資料庫的類,
定義方法肯定是寫在類里邊的,並且需要加訪問修飾限定符,定義方法就跟普通函數一樣,給你個參照吧:
/**
* mysql資料庫操作類
*/
class MySQLDB {
//保存單例屬性
private static $instance;
//操作資料庫所需要的必要信息
private $_host;//主機地址
private $_port;//埠
private $_user;//用戶名
private $_pass;//密碼
private $_charset;//默認字元集
private $_dbname;//默認資料庫
private $_prefix;//表前綴
private $_link;//連接標識保存屬性
/**
* 構造方法
* @param $params array 構造時,需要的信息列表 $params = array('host'=>'xxx', 'post'=>'xxx', 'user'=>....);
*
*/
private function __construct($params=array()) {
//通過實例化對象時,傳遞的參數,初始化屬性。
//同時判斷,增加默認值
$this->_host = isset($params['host'])?$params['host']:'127.0.0.1';
$this->_port = isset($params['port'])?$params['port']:'3306';
$this->_user = isset($params['user'])?$params['user']:'root';
$this->_pass = isset($params['pass'])?$params['pass']:'';
$this->_charset = isset($params['charset'])?$params['charset']:'utf8';
$this->_dbname = isset($params['dbname'])?$params['dbname']:'';
$this->_prefix = isset($params['prefix'])?$params['prefix']:'';
//連接伺服器
$this->_connect();
//設置編碼
$this->_setCharset();
//選擇資料庫
$this->_selectDb();
}
/**
* 單例所需的私有克隆方法
*/
private function __clone() {
}
/**
* 用於獲得該類對象的靜態方法
*
* @param $params array 構造該對象時 所使用的參數數組
*
* @return 該類的單例
*/
public static function getInstance($params) {
if(!(self::$instance instanceof self)) {
self::$instance = new self($params);
}
return self::$instance;
}
/**
* 連接資料庫
*
* @access private
*/
private function _connect() {
if($link = mysql_connect("{$this->_host}:{$this->_port}", $this->_user, $this->_pass)) {
//連接成功
$this->_link = $link;
} else {
//連接失敗
exit('-_-!連接失敗');
}
}
/**
* 在該類的對象,被反序列化時,對相應的資源進行重新初始化
*/
public function __wakeup() {
//連接伺服器
$this->_connect();
//設置編碼
$this->_setCharset();
//選擇資料庫
$this->_selectDb();
}
/**
* 在該類的對象,被序列化時,設置哪些屬性應該序列化
*/
public function __sleep() {
return array('_host', '_port', '_user', '_pass', '_dbname', '_charset', '_prefix');
}
/**
* 設置字元集
*
* @access private
*/
private function _setCharset() {
// if(!mysql_query("set names {$this->_charset}")) {
// exit(mysql_error());
// }
$this->_query("set names {$this->_charset}");
}
/**
* 選默認資料庫
*/
private function _selectDb() {
if($this->_dbname != '') {
$this->_query("use {$this->_dbname}");
}
}
/**
* 執行sql
*
* @access private
*
* @param $query string 待執行的sql語句
*
* @return mixed 如執行的查詢類,返回結果集,非查詢類的布爾值
*/
public function _query($query) {
//執行,判斷執行結果,返回執行結果。如果有錯誤,提供錯誤信息
if($result = mysql_query($query, $this->_link)) {
return $result;//返回結果即可
} else {
//執行失敗
echo '-_-好像失敗了!<br>';
echo '出錯的語句是:', $query, '<br>';
echo '錯誤的信息是:', mysql_error($this->_link), '<br>';
echo '錯誤的代碼是:', mysql_errno($this->_link), '<br>';
die;//腳本就不走了
}
}
/**
* (標題)獲得符合sql,的全部數據,適合用於執行查詢類方法,select,show,desc(describe)
*
* (詳細信息)通過得到一條查詢類語句,返回所有的查詢結果,方法內,需要實現,執行,獲得結果集,在結果集內取得所有數據
*
* @access public
*
* @param $query_str string 需要執行的查詢類字元串
*
* @return array 二維數組,每一個一維元素代表一條記錄,每一個二維的元素,表示一個記錄的欄位
*/
public function getAll($query_str) {
if($result = $this->_query($query_str)) {
//成功
$rows = array();//初始化,防止一條記錄都沒有。
while($row = mysql_fetch_assoc($result)) {
$rows[] = $row;
}
return $rows;
} else {
//失敗
return false;
}
}
/**
* 獲得符合sql,的第一條記錄,適合用於執行查詢類方法,select,show,desc(describe)
*
* (詳細信息)通過得到一條查詢類語句,返回第一條查詢結果,方法內,需要實現,執行,獲得結果集,在結果集內取得第一條數據
*
* @access public
*
* @param $query_str string 需要執行的查詢類字元串
*
* @return array 一維數組,每個元素,表示一個記錄的欄位
*/
public function getRow($query_str) {
if($result = $this->_query($query_str)) {
//成功
$row = mysql_fetch_assoc($result);
return $row;
} else {
//失敗
return false;
}
}
/**
* 獲得符合sql,的第一條記錄的第一個欄位,適合用於執行查詢類方法,select,show,desc(describe)
*
* (詳細信息)通過得到一條查詢類語句,返回第一條查詢結果的第一個欄位,方法內,需要實現,執行,獲得結果集,在結果集內取得第一條數據的第一個欄位
*
* @access public
*
* @param $query_str string 需要執行的查詢類字元串
*
* @return string 表示一個記錄的第一個欄位的值
*/
public function getOne($query_str) {
if($result = $this->_query($query_str)) {
//成功
$row = mysql_fetch_row($result);//最好使用索引數組
return $row[0];
} else {
//失敗
return false;
}
}
/**
* 獲取最新插入的自動增長ID
*/
public function last_insert_id() {
return mysql_insert_id($this->_link);
}
/**
* 取得影響的行數
*/
public function affected_rows() {
return mysql_affected_rows();
}
}
B. PHP真的能算是面向對象的語言嗎
面向對象三大特性:封裝,繼承,多態
php可以封裝對象,也可以繼承,同樣可以實現多態
多態是指指出重寫和重載,php子類可以重寫父類的方法,也可以通過方法的參數數量不同來重載方法,我覺得是面向對象語言