我在 PHP 应用程序中有两个类,例如 B 扩展了 A。 A 类有一个函数,它以 SQL 插入查询数组的形式返回一些其他属性,例如
Class A {
$property_a;
$property_b;
$property_c;
$property_d;
function queries() {
$queries = array();
$queries[] = "INSERT INTO xxx VALUES " . $this->property_a . ", " . $this->property_b";
$queries[] = "INSERT INTO yyy VALUES " . $this->property_b . ", " . $this->property_d";
}
}
我希望 B 类有一个类似的(相同的)函数,它对 B 类的属性执行相同的操作,同时仍然保留 A 类的值。这个想法是每个查询都将通过最终函数传递同时即:
$mysqli->query("START TRANSACTION");
foreach($queries as $query) {
if(!$mysqli($query)) {
$mysqli->rollback();
}
}
如果一切正常 $mysqli->commit();
实现这一目标的最简单方法是什么? 任何建议和想法都表示赞赏。 谢谢!
最佳答案
在 B::queries() 中,您可以调用 parent该方法的实现并将您的数据附加到 a::queries() 返回的数组中。
class B extends A {
protected $property_e=5;
public function queries() {
$queries = parent::queries();
// In a real application property_e needs to be sanitized/escaped
// before being mixed into the sql statement.
$queries[] = "INSERT INTO zzz VALUES " . $this->property_e;
return $queries;
}
}
$b = new B;
foreach( $b->queries() as $q ) {
echo $q, "\n";
}
但是您可能(也)想研究一个 ORM 库,例如doctrine .
关于PHP 扩展类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597300/