PHP性能:Is";“全球”;关键词优于;包括「;在功能上?
让我们假设我有一个database.php文件,其中包含对数据库的持久访问PHP性能:Is";“全球”;关键词优于;包括「;在功能上?,php,performance,pdo,Php,Performance,Pdo,让我们假设我有一个database.php文件,其中包含对数据库的持久访问 <?php $database = new PDO('mysql:host=xxx', "xxx", "xxx", array( PDO::ATTR_PERSISTENT => true )); ?> 每次我想在控制器中查询数据库时,我应该怎么做 1/使用global关键字获取我的全局$database变量 <?php include '../app/config/Database
<?php
$database = new PDO('mysql:host=xxx', "xxx", "xxx", array(
PDO::ATTR_PERSISTENT => true
));
?>
每次我想在控制器中查询数据库时,我应该怎么做
1/使用global关键字获取我的全局$database变量
<?php
include '../app/config/Database.php';
function getLastOfTheWeek()
{
global $database;
$database->query('SELECT * FROM `xxx`');
...
}
?>
2/在函数中包含database.php
<?php
function getLastOfTheWeek()
{
include '../app/config/Database.php';
$database->query('SELECT * FROM `xxx`');
...
}
?>
给这个人一些医生,他需要
或者两者都是有害的,我应该使用另一种方法。在这个简化的示例中,假设您有多个函数或函数调用,全局将更好地执行性能,因为全局将重复使用相同的连接 但是,这并不意味着多次包含Database.php总是会比较慢。假设您启用了opcache,多次包含同一个文件的开销将非常小。问题是,由于代码的编写方式,每次包含此文件时都会打开一个新的PDO连接
还有许多其他的解决方案不涉及使用全局搜索。DI容器通常用于在应用程序开始时解析依赖关系。如果您总是想重复使用相同的连接,那么单例设计模式也可能是有益的。在这个简化的示例中,假设您有多个函数或函数调用,全局将获得更好的性能,因为全局将重复使用相同的连接 但是,这并不意味着多次包含Database.php总是会比较慢。假设您启用了opcache,多次包含同一个文件的开销将非常小。问题是,由于代码的编写方式,每次包含此文件时都会打开一个新的PDO连接 还有许多其他的解决方案不涉及使用全局搜索。DI容器通常用于在应用程序开始时解析依赖关系。如果您总是想重复使用相同的连接,那么单例设计模式也可能是有益的
$dbh = new PDO (...);
function doSomething($dbh) {
$dbh->query(...);
}
class Something {
protected $dbh;
public function __construct($db_config) {
$this->dbh = new PDO($db_config); // still bad
}
public function doSomething() {
$this->dbh->query();
}
}
class Something {
protected $dbh;
public function __construct(PDO $dbh) {
$this->dbh = $dbh;
}
public function doSomething() {
$this->dbh->query();
}
}
$dbh = new PDO(...);
$s = new Something($dbh);
$s->doSomething;
确定:
$dbh = new PDO (...);
function doSomething($dbh) {
$dbh->query(...);
}
class Something {
protected $dbh;
public function __construct($db_config) {
$this->dbh = new PDO($db_config); // still bad
}
public function doSomething() {
$this->dbh->query();
}
}
class Something {
protected $dbh;
public function __construct(PDO $dbh) {
$this->dbh = $dbh;
}
public function doSomething() {
$this->dbh->query();
}
}
$dbh = new PDO(...);
$s = new Something($dbh);
$s->doSomething;
上帝层:
$dbh = new PDO (...);
function doSomething($dbh) {
$dbh->query(...);
}
class Something {
protected $dbh;
public function __construct($db_config) {
$this->dbh = new PDO($db_config); // still bad
}
public function doSomething() {
$this->dbh->query();
}
}
class Something {
protected $dbh;
public function __construct(PDO $dbh) {
$this->dbh = $dbh;
}
public function doSomething() {
$this->dbh->query();
}
}
$dbh = new PDO(...);
$s = new Something($dbh);
$s->doSomething;
见:
$dbh = new PDO (...);
function doSomething($dbh) {
$dbh->query(...);
}
class Something {
protected $dbh;
public function __construct($db_config) {
$this->dbh = new PDO($db_config); // still bad
}
public function doSomething() {
$this->dbh->query();
}
}
class Something {
protected $dbh;
public function __construct(PDO $dbh) {
$this->dbh = $dbh;
}
public function doSomething() {
$this->dbh->query();
}
}
$dbh = new PDO(...);
$s = new Something($dbh);
$s->doSomething;
确定:
$dbh = new PDO (...);
function doSomething($dbh) {
$dbh->query(...);
}
class Something {
protected $dbh;
public function __construct($db_config) {
$this->dbh = new PDO($db_config); // still bad
}
public function doSomething() {
$this->dbh->query();
}
}
class Something {
protected $dbh;
public function __construct(PDO $dbh) {
$this->dbh = $dbh;
}
public function doSomething() {
$this->dbh->query();
}
}
$dbh = new PDO(...);
$s = new Something($dbh);
$s->doSomething;
上帝层:
$dbh = new PDO (...);
function doSomething($dbh) {
$dbh->query(...);
}
class Something {
protected $dbh;
public function __construct($db_config) {
$this->dbh = new PDO($db_config); // still bad
}
public function doSomething() {
$this->dbh->query();
}
}
class Something {
protected $dbh;
public function __construct(PDO $dbh) {
$this->dbh = $dbh;
}
public function doSomething() {
$this->dbh->query();
}
}
$dbh = new PDO(...);
$s = new Something($dbh);
$s->doSomething;
请参阅:这并不是关于全局与包含,而是关于每次实例化一个新的PDO连接实例,而不是重复使用同一个连接。我认为您不应该将业务层与控制器层混淆。使用DIC@bassxzero可接受答案中的“DIC”非常糟糕。这与DI应该如何工作正好相反。@ishegg所以自己去回答这个问题吧。我只是给他指出了正确的方向。希望他能在谷歌上四处搜索,而不是复制和粘贴。这不是全局与包含,而是每次实例化一个新的PDO连接实例,而不是重复使用同一个连接。我认为你不应该将业务层与控制器层混淆。使用DIC@bassxzero“DIC”在公认的答案中,这是可怕的。这与DI应该如何工作正好相反。@ishegg所以自己去回答这个问题吧。我只是给他指出了正确的方向。希望他能用谷歌搜索,而不是复制和粘贴。这是个好答案!;-)不过需要注意的是:我直接将“OK”版本命名为“BAD”(关于配置数组和紧耦合):以及。让我们假设我有一个基本的网站,有index.php、home.php、contact.php。。。它们都需要数据库连接。我们选择“上帝层”解决方案,那么PDO实例将在哪里生成?为了随时重复使用相同的数据库连接?在理想情况下,您没有PHP文件和页面的1:1映射。您有一个带有请求路由器(例如:)的应用程序,该应用程序是用DI从内到外构建的。您有一个例子吗?一个很好的答案!;-)不过需要注意的是:我直接将“OK”版本命名为“BAD”(关于配置数组和紧耦合):以及。让我们假设我有一个基本的网站,有index.php、home.php、contact.php。。。它们都需要数据库连接。我们选择“上帝层”解决方案,那么PDO实例将在哪里生成?为了随时重复使用相同的数据库连接?在理想情况下,您没有PHP文件和页面的1:1映射。您有一个带有请求路由器(例如:)的应用程序,该应用程序是用DI从内到外构建的。您有一个例子吗?