首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展PDO类时对象声明中的错误

扩展PDO类时对象声明中的错误
EN

Stack Overflow用户
提问于 2011-06-10 17:35:54
回答 2查看 420关注 0票数 0

我有三门课。一个类是db,它从PDO扩展而来。另外两个类从db类扩展而来。但问题是,当我初始化这些子类的对象时,第二个对象是作为第一个对象的克隆创建的。提前感谢您的帮助。

代码语言:javascript
运行
复制
<?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);
?>

这是上面的输出。--请注意输出中显示的对象的类型。

代码语言:javascript
运行
复制
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)时,问题将消失。

EN

Stack Overflow用户

发布于 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对象。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6310058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档