【问题标题】:PHP: How to cast object to inherited class?PHP:如何将对象转换为继承的类?
【发布时间】:2011-03-03 08:26:47
【问题描述】:

我想继承 PDOStatement 类并在我的网站脚本中使用它。

但我很沮丧如何获得所需的对象。 PDO::query 只返回直接 PDOStatement 对象,看起来没有其他方法可以创建 PDOStatement 对象或继承类。

最初我想将 PDOStatement 对象移动到继承类的构造函数 类似的东西:

$stmt = PDO -> query("select * from messages");
$messageCollection = new Messaging_Collection($stmt);

但是如何使 PDOStatement 的实例成为继承对象(Messaging_Collection)。这对我来说是个大问题。

class Messaging_Collection extends PDOStatement
{
public function __construct(PDOStatement $stmt)
{
//there i should to transform $stmt to $this
// direct $this = $stmt is not possible
// is there other right way?
}

【问题讨论】:

    标签: php oop pdo pdostatement


    【解决方案1】:

    完成你想要做的最简单的方法实际上是这样的:

    class Messaging extends PDO {
        function __construct($dsn="", $username="", $password="", $driver_options=array()) 
        {       
            parent::__construct("mysql:host=" . self::$host_name . ";dbname=" .self::$db_name, self::$username, self::$password, self::$driver_options);
            $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('Messaging_Collection', array($this)));
        }
    }
    

    基本上,您可以使用 setAttribute() 方法覆盖您的自定义 PDO 类要使用的默认语句类。

    【讨论】:

    • 这确实是我需要做的。我知道获取对象的这种可能性,但这对我来说是新闻。谢谢
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多