我有一个父类和一个子类如下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 { // }当我调用方法时Produit::findByNumeroDeSerie($table, $numeroDeSerie),$produit = Produit::findByNumeroDeSerie("produits", $_GET['numeroDeSerie']);echo get_class($produit); // echoes Object它实例化了 anObjet而不是 a Produit,这意味着我无法访问Produit实例化对象上的 getter 方法。知道为什么吗?我是否需要在 Objet 的每个子类中重写findByNumeroDeSerie方法?
2 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
更简单,只需使用static
和“后期静态绑定”。
class TheParent {
public static function build(): TheParent
{
return new static();
}
}
class Child extends TheParent {}
$child = Child::build();
$parent = TheParent::build();
echo get_class($child), "\n"; //
echo get_class($parent), "\n";
输出:
孩子
家长
炎炎设计
TA贡献1808条经验 获得超4个赞
你写了:
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"
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消