Dbh 类没有从 ConfigApp 类中获取变量。
头部的Everypage.php:
<?php include 'config.inc.php'; ?>
config.inc.php:
<?php
class ConfigApp
{
const dbhost = "localhost";
const dbname = "secretdbname";
const dbuser = "secretdbsuer";
const dbpass = "secretdbpass";
const var1 = "something";
const var2 = "nothingToDoWithDB";
const var3 = "something else else";
}
?>
dbh.class.php:
<?php
class Dbh extends ConfigApp{
public function __construct($dbhost, $dbname, $dbuser, $dbpass) {
$this->dbhost = $dbhost;
$this->dbname = $dbname;
$this->dbuser = $dbuser;
$this->dbpass = $dbpass;
}
protected function connect() {
try {
$dsn = 'mysql:host=' .$this->$dbhost . ';dbname=' . $this->dbname;
$pdo = new PDO($dsn, $this->dbuser,$this->dbpass);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
$dbh = new PDO('mysql:host=localhost; dbname=c1gnsoftdboop' , $dbuser, $dbpass);
return $dbh;
} catch (PDOException $e) {
print "Database Connection Error!: " . $e->getMessage() . "<br/>";
die();
}
}
}
?>
config.inc.php 中的变量未传递到 dbh.classes.php.
在
ConfigApp
类中,您定义了Class Constants,而不是属性。因此,正如该文档所解释的那样,访问它们的语法是不同的。图案是:
self::constantname
所以在你的情况下,你需要
self::dbhost
等
因此您在
connect()
中的代码将是
$dsn = 'mysql:host=' .self::dbhost . ';dbname=' . self::dbname;
$pdo = new PDO($dsn, self::dbuser, self::dbpass);
附言
return $pdo;
函数中 connect()
之后的所有内容都是多余的,因为无法执行 return
之后的代码,并且在任何情况下都不需要定义连接两次!
此外,似乎没有必要通过
Dbh
类的构造函数传递新的数据库连接值,因为您打算从 ConfigApp
类常量中读取它们。