Php 我需要多次实例化这个类吗?

Php 我需要多次实例化这个类吗?,php,mysql,pdo,Php,Mysql,Pdo,当用户单击按钮时,我的脚本将实例化该类。因此,如果在我的网站上有50个用户点击这个按钮,那么这些类中有50个已经被实例化。这样做对吗?或者我需要检查这个类之前是否已经实例化过,如果已经实例化了,我就不做任何事情 我在这里连接到我的数据库。 这个类还有更多内容,这只是一个片段 class Database{ private $host = "localhost"; private $user = "rt"; private $pass = ""

当用户单击按钮时,我的脚本将实例化该类。因此,如果在我的网站上有50个用户点击这个按钮,那么这些类中有50个已经被实例化。这样做对吗?或者我需要检查这个类之前是否已经实例化过,如果已经实例化了,我就不做任何事情

我在这里连接到我的数据库。 这个类还有更多内容,这只是一个片段

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