声明新的class()类的开头

时间:2015-07-03 04:12:30

标签: php

我正在为想要创建网站的妻子制作内容管理系统,我有办法在过去总是做事,但我想提供更好的编码程序,所以这就是我的困境。

这是过去使用的Code I,我知道它可以工作。

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(); 
        }

    }
}

现在每个函数在函数开头需要global $db才能使用$db->sitedb,否则我们会抛出错误,所以我想做的是

class accounts {
    public $db = new db();
    public function CheckAccountLogin() {
        $query = <<<SQL
        SELECT id,gaToken
        FROM accounts
        WHERE password_hash = :hashedpw
SQL;
        $resource = $this->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。用上面的代码我给出了 Parse error: syntax error, unexpected 'new' (T_NEW) in /var/www/html/functions.d/accounts.class.php on line 3。我知道问题出在哪里,我只是在寻找比第一个代码块更清晰的方法。任何有助于使其正常工作的帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

除非可以在编译时对其进行评估,否则无法在那里初始化变量。因此,您无法在那里拨打new。请参阅docs。在构造函数中执行。

class accounts {
    public $db;

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

答案 1 :(得分:0)

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

在任何代码之前的开头包含此类,然后您可以通过后面任何类中的::运算符访问此对象。