各位大神,下面是我写的一个连接类有些疑问,望解答
class dboperator{ private static $db = null; public static function getinstance() { try { if($db == null) { $db = new pdo(mysql:host=.localhost.;dbname=.test,root,root, array(pdo::attr_persistent => true)); $db->setattribute(pdo::attr_case, pdo::case_upper); } return $db; } catch (exception $e) { die(数据库连接失败!.$e->getmessage()); } } function __destruct () { $db = null; } /** * 次函数主要是以集合的形式返回,或插入集合数据。 * @param unknown $strsql * @param unknown $array */ public static function executearraysql($strsql, $array) { try { dboperator::getinstance()->begintransaction(); $stms = dboperator::getinstance()->prepare($strsql); foreach ($array as $value) { $stms->execute($value); } dboperator::getinstance()->commit(); }catch (pdoexception $e) { print error: . $e->getmessage() .
; die(); } } /** * 次函数主要是用来指定条件查询 * @param unknown $strsql * @param unknown $array 查询参数 */ public static function executesql($strsql,$array) { try { $stms = dboperator::getinstance()->prepare($strsql); $bret = $stms->execute($array); return $bret; }catch (pdoexception $e) { print error: . $e->getmessage() .
; die(); } }}
当我第一次执行方法调用dboperator::getinstance() 这个时候$db为null, 满足条件new pdo,
但是当我执行第二次调用dboperator::getinstance() 的时候$db 应该在第一次的时候就实例化了,但是我debug发现$db还是为null, 又执行了一次new pdo,这是怎么回事
回复讨论(解决方案) $db 都改成 self::$db
private static $db = null;
这个不要改