Php 在类的开头声明新类()

Php 在类的开头声明新类(),php,Php,我正在为我妻子开发一个内容管理系统,她想创建一个网站,我有一种过去一直在做的方法,但我想提供更好的编码过程,所以这是我的两难选择 这是我过去使用过的代码,我知道它是有效的 class accounts { public function CheckAccountLogin() { global $db; $query = <<<SQL SELECT id,gaToken FROM accounts

我正在为我妻子开发一个内容管理系统,她想创建一个网站,我有一种过去一直在做的方法,但我想提供更好的编码过程,所以这是我的两难选择

这是我过去使用过的代码,我知道它是有效的

class accounts {
    public function CheckAccountLogin() {
        global $db;
        $query = <<<SQL
        SELECT id,gaToken
        FROM accounts
        WHERE password_hash = :hashedpw
SQL;
        $resource = $db->sitedb->prepare( $query );
        try {
            $resource->execute( array (
            ':hashedpw' => sha1($_POST['user-name'].':'.$_POST['user-pass']),
            ));
            if($resource->rowCount() == 0 ) { echo false;}
            else { 
            foreach($resource as $row) { 
            $this->authkey = $row['gaToken'];
            if($this->authkey == "") {
                self::SetSession();
                }
                else {
                    self::CheckAuth();
                }
            }
        }
        catch(PDOException $e) {
            echo $e->getMessage(); 
        }

    }
}
这样,在我所有的新函数中,只要我需要连接到数据库,我就可以简单地声明
$This->sitedb
。通过上面的代码,我得到了
解析错误:语法错误,第3行的/var/www/html/functions.d/accounts.class.php中出现意外的“new”(T_new)。我知道问题在哪里,我只是在寻找一种比我的第一个代码块更干净的方法。如果能帮助您正确地执行此操作,我们将不胜感激。

除非可以在编译时对变量进行求值,否则无法在那里初始化变量。所以你不能在那里调用
new
。看。在构造函数中执行此操作

class accounts {
    public $db;

    public function __construct() {
        $this->db = new db();
    }
}

您可以创建一个全局类
DbConnect
,在该类中静态定义数据库对象db并将其连接到数据库,这样您将在整个应用程序中保留一个数据库连接对象


在任何代码之前的开头包含该类,然后您可以通过后面任何类中的
操作符在任何位置访问该对象

使用依赖注入或创建一个实际工作非常好的单例模型类,我从来没有想过在每个类中使用构造,我想我可以使用它来清理我拥有的很多东西。例如,一个构造函数自动包含为一个子类并实例化所有类。谢谢。可能更明智的做法是对数据库之类的东西使用受保护的变量,这样就不能在类良好点之外对其进行修改。我试图使我的代码尽可能地类似于原始示例,这样就很容易看到它是如何工作的。
class accounts {
    public $db;

    public function __construct() {
        $this->db = new db();
    }
}