我正在为我的妻子开发一个内容管理系统,她想创建一个网站,我有一种过去一直在做的事情,但我想提供更好的编码过程,所以这是我的困境。
这是我过去使用过的代码,我知道它是有效的。
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
。我知道问题出在哪里,我只是在寻找一种比我的第一个代码块更干净的方法。如能为您提供任何帮助,我们将不胜感激。
除非可以在编译时对变量求值,否则无法在那里初始化变量。所以你不能在那里打new
。请参阅文档。在构造函数中执行。
class accounts {
public $db;
public function __construct() {
$this->db = new db();
}
}
您可以创建一个全局类DbConnect
,在其中静态定义数据库对象db并将其连接到数据库,这样您将在整个应用程序中保留一个数据库连接对象。
在任何代码的开头包含此类,然后您可以通过后面任何类中的::
运算符在任何位置访问此对象。