我有一个includes.php页面,我在我的网站的每个页面的开头加载.在我开发网站时,我使用的课程数量正在增长.所以我最终得到这样的东西:
$db = new DB($config);
$login = new Login($db, $config);
$form = new Form($db, $config);
Run Code Online (Sandbox Code Playgroud)
这样的例子不胜枚举.关于这种做法,我有两个问题:
首先,考虑到我可能没有在某个页面上使用类(我可能在每个页面上都没有$表单),每次加载任何给定页面时加载此类,在性能方面确实有多重要?
其次,您可能已经注意到我将类实例$ db传递给所有其他类,以及变量$ config.在每个类的PHP代码中,我做这样的事情:
public $db;
public $config;
public function __construct($db, $config, $smarty){
$this->db = $db;
$this->config = $config;
}
Run Code Online (Sandbox Code Playgroud)
然后在类方法中,我使用'this'来解决数据库和配置文件:
public function myfunction(){
$this->db;
$this->config;
}
Run Code Online (Sandbox Code Playgroud)
我应该何时使用'extends'而不是将$ db传递给类,假设每个类都使用db?在性能方面,以每个类别传递$ db是否会受到任何影响?
谢谢!
我应该何时使用'extends'而不是将$ db传递给类,假设每个类都使用db?
什么时候有意义 - 只有当它有意义时!
您至少需要考虑两件事:
class A extends B"有点意思" class A **is a** B"
Car是,a 是一个MotorVehicule; a MotorVehicule是a Vehicule; a Bus是a MotorVehicule; 自行车是一个VehiculeBall不是VehiculeForm绝对不是一个DataBase!也不是Loginextend 一个类
Vehicule和一个AnimalCar 是a MotorVehicule,它本身就是 Vehicule :-)对于Database对象(在您的情况下,它更多是与DB的连接),您的大多数类本身不会"成为"数据库连接.所以,他们不应该扩展那个级别.
但是,他们正在使用DB连接(Form" 有一个 "DB连接) ; 所以,他们应该有一个表示该数据库连接的属性.这就是你在做什么.
$db您可以使用,
而不是传递给每个构造函数
但是传递$db对象非常适合单元测试,模拟对象以及所有这些...
我认为它可以被认为是依赖注入设计模式,顺便说一句(不确定,但看起来像它)
关于加载很多课程,其他人给出了答案:
这两个都是你应该考虑的好建议;-)
最后一件事 :
在性能方面,以每个类别传递$ db是否会受到任何影响?
也许它确实有点位; 但是,真的,除非你是谷歌并拥有数百万用户......谁在乎呢?
如果您正在进行几个数据库查询,那么与将一个参数传递给十几个方法相比,这将花费大量时间!
因此,通过参数的少量时间可能会被忽略:-)
| 归档时间: |
|
| 查看次数: |
2538 次 |
| 最近记录: |