这是我的代码:
abstract class Sql { }
class MySQL extends Sql { }
class OracleSQL extends Sql { }
class A
{
public function doA(Sql $sql) { ... }
}
class B
{
public function doB(Sql $sql) { ... }
}
class Users
{
public function __construct(Sql $sql)
{
if (rand(0,1) == 0) // depends on the circumstances
{
$a = new A($sql);
$a->doA();
}
else
{
$b = new B($sql);
$b->doB();
}
}
}
有一些问题:
A
和B
是硬编码的。但如果Users::constructor
决定使用哪一个,如何传递它们?创建两者都是不必要的,以防万一User
本身不需要A
或B
的实例,甚至不需要Sql
这个问题似乎"将信封传递给A将其带到B但是只有B有权阅读它,A仍然可以打开#34;