如何确保子方法实例化子对象而不是父对象?

本尼迪克特

我有一个父母班和一个孩子班,如下

class Objet {

    ../..

    static function findByNumeroDeSerie($table, $numeroDeSerie) {
        $db = new Db();
        $query = $db->prepare("SELECT * from $table WHERE numeroDeSerie = :numeroDeSerie");
        $query->bindValue(':numeroDeSerie', $numeroDeSerie, PDO::PARAM_INT);
        $query->execute(); 
        while($row = $query->fetch()) {
            return new Objet($row);
        }
    }
}


class Produit extends Objet {
    // 
}

当我调用method时Produit::findByNumeroDeSerie($table, $numeroDeSerie)

$produit = Produit::findByNumeroDeSerie("produits", $_GET['numeroDeSerie']);
echo get_class($produit); // echoes Object

它实例化了Objet一个Produit而不是,这意味着我无法访问Produit实例化对象上的getter方法

知道为什么吗?我是否需要在Objet的每个子类中重写findByNumeroDeSerie方法?

Nolifer

你写了:

return new Objet($row);

所以你有对象。如果要findByNumeroDeSerie返回这样的产品使用get_called_class()功能:

<?php

class A {
    static public function foo() {
        $className = get_called_class();
        return new $className();
    }
}

class B extends A {

}

var_dump(get_class(B::foo())); // string(1) "B"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在基于列表复制父对象合并子对象

使用通过GSON反序列化的父对象的参数实例化子对象,并使用泛型?

如何基于子对象字段获取父对象

抽象类方法-实例化子类对象?

如何通过标签找到父对象的子对象?

如何最好地使用父类中的对象初始化子类的对象?

实际对象而不是父类的调用方法

子对象未在父对象上实例化

如何在不是对象或功能的对象实例上原型?

如何从Firestore制作父/子对象流

委托对象实例的方法,而不是类的所有对象

如何使实例化为父游戏对象的子对象的该游戏对象位于偏移处?

为什么在初始化子对象并将其分配给父对象时调用父方法

JavaScript继承问题不一致(所有子对象的父实例是单个实例...还是不是?)

如何通过子子对象排序父对象

JUnit异常“对象不是声明方法的实例”

如何从对象的父类的方法内部获取对象的调用实例?

如何使用Hibernate在父类对象中保存子对象?

如何获取方法的父对象?

Java从父对象实例化子对象

移动父对象时如何避免移动子对象?

如果同一个子对象多次存在,如何确保 NSOutlineView.parent(forItem:) 返回正确的父对象?

将父对象的事件绑定到临时子对象的方法

如何列出所有父对象的所有子对象?

RxJs 如何在返回父对象的同时映射子对象?

如何使用父对象的构造函数创建子对象?(爪哇)

实例化并设置为子游戏对象的父级

如何在Python中访问父类变量并使用子对象调用父方法

如何将子对象移动到父对象的位置?