Php 我需要多次实例化这个类吗?
当用户单击按钮时,我的脚本将实例化该类。因此,如果在我的网站上有50个用户点击这个按钮,那么这些类中有50个已经被实例化。这样做对吗?或者我需要检查这个类之前是否已经实例化过,如果已经实例化了,我就不做任何事情 我在这里连接到我的数据库。 这个类还有更多内容,这只是一个片段Php 我需要多次实例化这个类吗?,php,mysql,pdo,Php,Mysql,Pdo,当用户单击按钮时,我的脚本将实例化该类。因此,如果在我的网站上有50个用户点击这个按钮,那么这些类中有50个已经被实例化。这样做对吗?或者我需要检查这个类之前是否已经实例化过,如果已经实例化了,我就不做任何事情 我在这里连接到我的数据库。 这个类还有更多内容,这只是一个片段 class Database{ private $host = "localhost"; private $user = "rt"; private $pass = ""
class Database{
private $host = "localhost";
private $user = "rt";
private $pass = "";
private $dbname = "db";
public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
}
每次使用不同的凭据(参数)时,都需要实例化该类。因此,如果每个用户都使用不同的凭据创建新连接,那么每次都需要实例化。否则,您必须进行适当的检查并继续使用相同的连接 这样做对吗 是的。
这就是PHP的工作原理。50个PHP实例运行,50个连接到已建立的数据库,等等 我需要检查这个类以前是否已经实例化过吗 您可以,但这将是非常无用的,因为其他用户的点击将由一个完全独立的PHP进程处理,您将无法访问它 这里是构造函数的稍微改进版本
public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
您的PHP脚本需要在用户每次加载页面时运行,无法在用户每次加载页面时实例化类 这是基于HTTP的通信的固有特性:无状态;PHP是在HTTP协议下运行的,因此它受到其限制 您可以通过使用数据库和会话(基本上只是使用唯一键作为文件名存储信息的文件)来模拟状态,但是PHP脚本本身必须受到HTTP没有状态的限制
因此,无法通过几个不同的连接将类保存在内存中。粗略地说,每个HTTP请求都会触发一个独立的PHP脚本执行,并以该请求结束。我认为这与调用多少次无关,例如
$a=new Database()代码>,但它将被复制多少次?是的。这样比较好。如果不打算尝试处理异常,请不要捕获异常。什么都不能处理P