Php 如何扩展变量的使用
这个代码不起作用 我想创建一个DB类,然后有一些DB驱动程序:mysql、mssql v..v。Php 如何扩展变量的使用,php,oop,Php,Oop,这个代码不起作用 我想创建一个DB类,然后有一些DB驱动程序:mysql、mssql v..v。 $db='mysql'所以我希望DB类扩展mysql。类扩展类,而不是变量 $laca = 'laca'; class laca(){ /*Code*/ } class foo extends $laca; 类扩展类,而不是变量 $laca = 'laca'; class laca(){ /*Code*/ } class foo extends $laca; 不要扩展laca类,
$db='mysql'代码>所以我希望DB类扩展mysql。类扩展类,而不是变量
$laca = 'laca';
class laca(){ /*Code*/ }
class foo extends $laca;
类扩展类,而不是变量
$laca = 'laca';
class laca(){ /*Code*/ }
class foo extends $laca;
不要扩展laca类,而是将其传递给foo类,以便它可以使用它
class a {
// Code
}
class b extends a {
// Code
}
不要扩展laca类,而是将其传递给foo类,以便它可以使用它
class a {
// Code
}
class b extends a {
// Code
}
如果不使用eval()
,这似乎是不可能的extends
需要正确限定的类名,并且在任何情况下都不能是变量。如果不使用eval()
,这似乎是不可能的<代码>扩展
需要一个正确限定的类名,并且在任何情况下都不能是变量。我认为这里真正需要的是一个DBFactory:
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);
事实上,我认为您想要使用我认为您真正想要的是DBFactory:
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);
事实上,我认为你想用我认为你做得不对 您应该做的是创建一个层次结构:有一个基本的
DB
抽象类来定义适用于所有数据库类型的公共行为,然后为每个数据库创建一个单独的类来扩展基类。换句话说,类似这样的事情:
class DBFactory {
public static function create($driver) {
switch(strtolower($driver)) {
case 'mysql':
return new MysqlDB();
}
}
}
class MysqlDB{}
$db = DBFactory::create('mysql');
然后,根据需要的数据库,创建适当类的实例:
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) {
//...
}
}
我认为你做得不对 您应该做的是创建一个层次结构:有一个基本的
DB
抽象类来定义适用于所有数据库类型的公共行为,然后为每个数据库创建一个单独的类来扩展基类。换句话说,类似这样的事情:
class DBFactory {
public static function create($driver) {
switch(strtolower($driver)) {
case 'mysql':
return new MysqlDB();
}
}
}
class MysqlDB{}
$db = DBFactory::create('mysql');
然后,根据需要的数据库,创建适当类的实例:
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) {
//...
}
}
我个人会在任何适合的地方使用它。有时我甚至会将类标识符放在后面。原因是,如果您的类中有侦听器、线程或其他内部类,您可能会感觉更好、更清晰,以避免冲突。我个人会在任何适合的地方使用它。有时我甚至会将类标识符放在后面。原因是,如果你的类中有侦听器、线程或其他内部类,你可能会感觉更好、更清晰,以避免冲突。我认为OP想要做的是扩展一个直到运行时才知道名称的类。我认为OP想要做的是扩展一个直到运行时才知道名称的类。你或者其他人,请更新帖子,以便执行/保留突出显示和格式设置?不要将一个问题替换为另一个问题。将答案标记为“已接受”,然后打开一个新问题。请您或其他人更新帖子,以便执行/保留突出显示和格式设置。不要将一个问题替换为另一个问题。将答案标记为“已接受”,并打开一个新问题。我希望用户设置一个db类型使用的变量,然后他们可以在基本db上使用它:class db{$db='mysql';->然后使用mysql class}我希望用户设置一个db类型使用的变量,然后他们可以在基本db上使用它:class db{$db='mysql';->然后使用mysql class}