PHP OOP连接到MYSQL(构造函数与传递实例)的效率


PHP OOP connection to MYSQL (constructor vs. passing instance) efficiency

我一直在想OOP连接的效率。示例结构如下所示。每个类由文件夹和类名分隔。例如:

/mysql/mysql.class.php //holds general connect and disconnect functions
/mysql/query.class.php //holds all the queries made to the db (uses basic mysql ^ )
/library/application.class.php //holds all the algorithms (uses queries to db ^ )

当涉及到执行算法时,application.class.php调用query.class.php(当它需要查询时),后者调用mysql.class.php进行连接。

这两种方法中哪一种是正确的(如果有的话,或者两者都是)?有没有一种更简单、更有效的方法可以做到这一点?

这是做两件事的相同方法(哪个更有效?)

require_once('/mysql/mysql.class.php ');
require_once('/mysql/query.class.php ');
$mysqlClass = new MYSQL();
$queryClass = new Query();
class Application {                
  public function getVar() {         
    $param = foo;         
    $db = $mysqlClass->connect(); //connection to mysql
    $queryClass->callsomequerymethod($db, $param); //pass the db connection to function
  } 
} 

VS

class Application {     
  private $db;      
  public function __construct(DatabaseConnection $db, QueryClass $queryclass){
    $this->db = $db;     
  }           
  public function getVar() {         
    $param = foo;         
    $db = $this->db;
    $queryclass->callsomequerymethod($db, $param);
  } 
} 

无法评论效率,但第二种方法会更好,因为变量在使用它们的类中的作用域很整齐,而不是位于全局命名空间中。

我要做的另一个修改是在构造函数中移动require语句,这样只有当使用它们的类(在您的例子中是Application)实例化时,这些文件才会被包括在内。