$laca = 'laca';
class laca(){ /*Code*/ }
class foo extends $laca;
此代码不起作用。
我想创建一个DB类,然后有一些DB驱动程序:mysql,mssql v..v。
$db = 'mysql';
所以我希望DB类扩展mysql。
答案 0 :(得分:3)
而不是扩展 laca类,将传递给foo类,以便它可以使用它。
class foo {
function __construct($laca) {
$this->laca = $laca;
}
function storeWidgets($widgets) {
foreach ($widgets as $widget) {
$this->laca->saveWidget($widget);
}
}
}
...
$laca = new laca();
$foo = new foo($laca);
答案 1 :(得分:1)
我认为你真正想要的是DBFactory:
class DBFactory {
public static function create($driver) {
switch(strtolower($driver)) {
case 'mysql':
return new MysqlDB();
}
}
}
class MysqlDB{}
$db = DBFactory::create('mysql');
实际上,我认为你想使用PDO
答案 2 :(得分:0)
类扩展了类,而不是变量。
class a {
// Code
}
class b extends a {
// Code
}
答案 3 :(得分:0)
如果不使用eval()
,这似乎是不可能的。 extends
需要一个合格的类名,在任何情况下都不能成为变量。
答案 4 :(得分:0)
我认为你做得不对。
你应该做的是创建一个层次结构:有一个基础DB
抽象类,它定义了适用于所有数据库类型的通用行为,然后为每个数据库扩展基类有一个单独的类。换句话说,就像这样:
abstract class DB {
public function __construct($host, $username, $password) {
$this->connect($host, $username, $password);
}
abstract public function connect($host, $username, $password);
abstract public function query($sql);
}
class MySQL extends DB {
public function connect($host, $username, $password) {
//...
}
public function query($sql) {
//...
}
}
然后,根据您需要的数据库,创建适当类的实例:
if ($dbtype == 'mysql') {
$DB = new MySQL($host, $username, $password);
}
else if ($dbtype == 'mssql') {
$DB = new MySQL($host, $username, $password);
}
//...
答案 5 :(得分:0)
我个人在适合的任何地方使用它。有时我甚至把类标识符放在后面。理由,如果你的课程中有听众,线程或其他内部课程,你可能会感觉更好更清楚,以避免冲突。