我有三门课。一个类是db,它从PDO扩展而来。另外两个类从db类扩展而来。但问题是,当我初始化这些子类的对象时,第二个对象是作为第一个对象的克隆创建的。提前感谢您的帮助。
<?php
/** The Database Driver */
define('DB_DRIVER', 'mysql');
/** The name of the database */
define('DB_NAME', 'sample');
/** MySQL database username */
define('DB_USER', 'root');
/** MySQL database password */
define('DB_PASSWORD', 'root');
/** MySQL hostname */
define('DB_HOST', 'localhost');
class db extends PDO
{
public function __construct()
{
echo "DB constructor called\n";
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$dsn = DB_DRIVER . ":host=" . DB_HOST . ";dbname=" . DB_NAME;
parent::__construct($dsn, DB_USER, DB_PASSWORD, $options);
}
}
class Admin extends db
{
private $uid, $username, $password, $level, $name, $email;
public function __construct()
{
echo "Admin constructor called\n";
parent::__construct();
}
}
class Movie extends db
{
private $mid, $title, $slug;
public function __construct()
{
echo "Movie constructor called\n";
parent::__construct();
}
}
$adminObj = new Admin();
$movieObj = new Movie();
var_dump($adminObj);
var_dump($movieObj);
?>这是上面的输出。--请注意输出中显示的对象的类型。
Admin constructor called
DB constructor called
Movie constructor called
DB constructor called
object(Admin)#1 (6) {
["uid":"Admin":private]=>
NULL
["username":"Admin":private]=>
NULL
["password":"Admin":private]=>
NULL
["level":"Admin":private]=>
NULL
["name":"Admin":private]=>
NULL
["email":"Admin":private]=>
NULL
}
object(Admin)#2 (6) {
["uid":"Admin":private]=>
NULL
["username":"Admin":private]=>
NULL
["password":"Admin":private]=>
NULL
["level":"Admin":private]=>
NULL
["name":"Admin":private]=>
NULL
["email":"Admin":private]=>
NULL}
当删除db类中的parent::__construct($dsn、DB_USER、DB_PASSWORD、$options)时,问题将消失。
发布于 2011-06-10 18:13:31
您有PDO::ATTR_PERSISTENT => true,,并且尝试使用相同的DSN字符串创建2个PDO对象。这告诉PDO在执行$movieObj = new Movie();时返回已经建立的连接,而不是创建新的连接。
在您的案例中解决方案:PDO::ATTR_PERSISTENT => false,
有用的链接:连接和连接管理
当删除db类中的parent::__construct($dsn、DB_USER、DB_PASSWORD、$options)时,问题将消失。是的,因为在这种情况下不会创建实际的PDO对象。
https://stackoverflow.com/questions/6310058
复制相似问题