PHP:如何将对象转换为继承的类?
Posted
技术标签:
【中文标题】PHP:如何将对象转换为继承的类?【英文标题】:PHP: How to cast object to inherited class? 【发布时间】: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?
【问题讨论】:
【参考方案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 类要使用的默认语句类。
【讨论】:
这确实是我需要做的。我知道获取对象的这种可能性,但这对我来说是新闻。谢谢以上是关于PHP:如何将对象转换为继承的类?的主要内容,如果未能解决你的问题,请参考以下文章
如何将我的 .tar.gz 文件转换为 shutil.copyfileobj 的类文件对象?