可能是一个愚蠢的问题,我在PHP中有许多使用此模板的类:
class SomeTable {
private $db;
private $prefix;
private $tbl_name;
function __construct($db, $tbl_name) {
$this->db = $db;
$this->prefix = $db->tblPrefix();
$this->tbl_name = $tbl_name;
$this->install();
}
private function install() {
$sql = "CREATE TABLE IF NOT EXISTS...";
$this->db->query($sql, null);
}
// query functions
...
}
install()
函数都不同,因为它是
用于创建数据库表。 (我喜欢把它放在这里,因为
在编写/编辑查询时,我可以继续回顾它。然后我是否使用3个变量,构造函数,空install()函数创建一个抽象类,并在每个类中实现它?它会对我有效吗?
如果这是一个愚蠢的问题,我很抱歉,我以前从未在PHP中使用类/继承。
答案 0 :(得分:1)
如果扩展类,则将继承父类中存在的任何公共或受保护方法。所以如果你有这样的课程:
class Database {
public function get_database(){
return 'blah';
}
}
然后你像这样扩展这个类:
class Blah extends Database {
...
}
现在,Blah类将继承方法get_database()
,因此Database::get_database()
和Blah::get_database()
都将返回相同的内容。您还可以使用parent::
特殊名称来定位扩展类。注意:私有方法仅在实例化它们的类中可用,并且不会被继承。
我还应该注意,您可以通过在子类中使用相同的方法名来覆盖方法。因此,如果您在Blah类中编写get_database()
方法,它将优先于父级的同名方法。
答案 1 :(得分:1)
然后我创建一个带有3个变量的构造函数的抽象类, empty install()函数并在每个类中实现它?它会起作用吗 对我来说一样吗?
是。现在,3个变量必须是protected
,而不是private
,因为它们需要从子类访问。像这样:
abstract class DBTable{
protected $db;
protected $prefix;
protected $tbl_name;
function __construct($db, $tbl_name) {
$this->db = $db;
$this->prefix = $db->tblPrefix();
$this->tbl_name = $tbl_name;
}
abstract function install();
}
class SomeTable extends DBTable {
private function install() {
$sql = "CREATE TABLE IF NOT EXISTS...";
$this->db->query($sql, null);
}
}