導航:首頁 > 編程語言 > php中面向對象的機制

php中面向對象的機制

發布時間:2024-02-06 12:16:41

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子類可以重寫父類的方法,也可以通過方法的參數數量不同來重載方法,我覺得是面向對象語言

閱讀全文

與php中面向對象的機制相關的資料

熱點內容
vue多端編譯 瀏覽:750
程序員qq表白代碼編輯 瀏覽:893
聯想伺服器怎麼進後台 瀏覽:114
安卓定製rom怎麼刷 瀏覽:539
三層交換機的配置命令 瀏覽:110
49演算法公式 瀏覽:788
求最小生成樹演算法代碼及運行圖片 瀏覽:930
python掃雷計數 瀏覽:879
什麼安卓手機品牌最保值 瀏覽:843
編程貓買房子 瀏覽:134
c語言系列編程 瀏覽:742
符合國標加密標准技術 瀏覽:496
加密狗介面會壞嗎 瀏覽:625
javame開發 瀏覽:380
python3偽裝瀏覽器 瀏覽:242
信息聯想伺服器專班是干什麼的 瀏覽:99
python獲取cpu個數 瀏覽:864
命令提示符查網速 瀏覽:229
對於某個理論演算法可以直接抄嗎 瀏覽:188
如何訪問ftp伺服器下載文件 瀏覽:392