
批改狀態(tài):合格
老師批語:$pdo->query()方法一般用來執(zhí)行select sql語句, 返回pdoStatement對(duì)象(結(jié)果集); 對(duì)于insert delete update語句, 一般使用$pdo->exec($sql);返回受影響的行數(shù).
代碼塊
<?php/** * PHP語言是一種解釋型的腳本語言,這種運(yùn)行機(jī)制使得每個(gè)PHP頁面被解釋執(zhí)行后,所有的相關(guān)資源都會(huì)被回收。也就是說,PHP在語言級(jí)別上沒有辦法讓某個(gè)對(duì)象常駐內(nèi)存,這和asp.net、Java等編譯型是不同的,比如在Java中單例會(huì)一直存在于整個(gè)應(yīng)用程序的生命周期里,變量是跨頁面級(jí)的,真正可以做到這個(gè)實(shí)例在應(yīng)用程序生命周期中的唯一性。然而在PHP中,所有的變量無論是全局變量還是類的靜態(tài)成員,都是頁面級(jí)的,每次頁面被執(zhí)行時(shí),都會(huì)重新建立新的對(duì)象,都會(huì)在頁面執(zhí)行完畢后被清空,這樣似乎PHP單例模式就沒有什么意義了 * */ //PHP單例模式只是針對(duì)單次頁面級(jí)請(qǐng)求時(shí),出現(xiàn)多個(gè)應(yīng)用場(chǎng)景并需要共享同一對(duì)象資源時(shí)是非常有意義的。/** * 面向?qū)ο缶幊倘筇匦? * 1. 封裝 可見性 php中使用3種類型的可見性 : private(私有), protected(保護(hù)),public(公共) * 封裝一個(gè)程序元素, 把它設(shè)為private,僅在本類中可見,還可以把它設(shè)為protected,允許本類及其子類訪問該屬性; 要訪問封裝的對(duì)象, 必須提供公有的可見性. 想要作為一個(gè)真正有用的類, 必須至少提供一些方法是可見的(即使只是構(gòu)造函數(shù)) * * * 2. 繼承 inheritance * 一個(gè)類擴(kuò)展另一個(gè)類,前者會(huì)擁有后者的所有屬性和方法. * php oop具有單繼承的特點(diǎn) -> 帶來程序的高耦合性:如果程序通過深層次繼承綁定到具體類,即使對(duì)父類做簡(jiǎn)單的修改,也會(huì)對(duì)子類帶來嚴(yán)重的破壞 -> 解決辦法: 1. 為了保證類之間的松綁定,通常會(huì)繼承抽象類,而且是淺繼承,即只有一層子類. 2. 引入trait結(jié)構(gòu) * * * 3. 多態(tài) polymorphism 多態(tài)只有在oop上下文中討論才有意義,多態(tài)真正價(jià)值在于,可以調(diào)用有相同接口的對(duì)象完成不同的工作. 基于一個(gè)公共接口, 在一個(gè)給定的程序結(jié)構(gòu)中做出修改或增補(bǔ)時(shí), 可以放心遞請(qǐng)求或使用接口方法而不必?fù)?dān)心程序會(huì)崩潰 一個(gè)名字多個(gè)實(shí)現(xiàn) * * * 接口通常允許開發(fā)人員創(chuàng)建松綁定的對(duì)象和類,php接口允許儲(chǔ)存常量,實(shí)現(xiàn)接口的類都可以使用接口中儲(chǔ)存的常量 */ //單例模式連接數(shù)據(jù)庫(kù) 應(yīng)用程序與數(shù)據(jù)庫(kù)交互 interface iDbBase { // 數(shù)據(jù)庫(kù)操作 curd static function insert($db); static function select($db,$where=[]); static function delete($db,$where=[]); static function update($db,$data,$where); static function doConnect($dsn,$username,$password); // return $this;實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用 } //使用單例模式連接數(shù)據(jù)庫(kù) abstract class aDb implements iDbBase { //創(chuàng)建類的唯一實(shí)例 唯一對(duì)象 private static $instance;//保存返回的pdo連接對(duì)象 //private關(guān)鍵字 阻止此類在外部進(jìn)行實(shí)例化 private function __construct() { } //private關(guān)鍵字阻止此類在外部進(jìn)行克隆 private function __clone() { } //只能由類的自身 來進(jìn)行實(shí)例化 static function doConnect($dsn,$username,$password){ //判斷$instance是否是aDb類的對(duì)象 if(is_null(self::$instance)) { // echo 'aaaa'; //實(shí)例化本類, 傳入連接參數(shù), self::$instance = new PDO($dsn,$username,$password); } return self::$instance; } } //客戶端代碼// $config = [// 'type'=> $type ?? 'mysql',// 'host'=> $host ?? 'localhost',// 'dbname'=> $dbname ?? 'news',// 'username'=> $username ?? 'root',// 'password'=> $password ?? 'zhoujielun521'// ];// $dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);// $username = $config['username'];// $password = $config['password'];// // aDb::doConnect($dsn,$username,$password);// for ($i=0; $i < 10; $i++) { // aDb::doConnect($dsn,$username,$password);// }//工作類class Db extends aDb{ // 數(shù)據(jù)庫(kù)操作 curd static function insert($db) { return $db->query('insert into `admins`(`username`,`password`,`truename`,`gid`,`add_time`) value("asd","fdsa","dsadsas",2,4213) ')->fetchAll(PDO::FETCH_ASSOC); } static function select($db,$where=[]) { return $db->query('SELECT * FROM `iuser` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC); } static function delete($db,$where=[]) { } static function update($db,$data,$where) { }}//客戶端代碼$config = [ 'type'=> $type ?? 'mysql', 'host'=> $host ?? 'localhost', 'dbname'=> $dbname ?? 'video', 'username'=> $username ?? 'root', 'password'=> $password ?? 'root'];$dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);$username = $config['username'];$password = $config['password'];//獲取pdo連接對(duì)象$db = Db::doConnect($dsn,$username,$password);echo '<pre>';print_r(Db::insert($db,));
效果
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)