PHP OOP独立配置文件数据库连接问题:Dbh类无法获取ConfigApp常量
解决PHP OOP数据库连接中Dbh无法获取ConfigApp配置的问题
核心错误分析
- 构造函数冗余设计:Dbh类继承了ConfigApp,但构造函数仍要求传入数据库参数,完全没利用父类的常量配置,这是无法获取配置的根本原因。
- 常量访问语法错误:connect方法中使用
$this->$dbhost这种变量变量的写法,而ConfigApp中的配置是类常量,正确的访问方式应为self::dbhost或ConfigApp::dbhost。 - 无效冗余代码:connect方法中创建第一个PDO实例后已执行
return,后续的PDO实例化代码永远不会被执行,属于无效代码。
修正后的Dbh类代码
<?php class Dbh extends ConfigApp{ // 无需构造函数,直接使用继承的类常量 protected function connect() { try { // 通过self::访问继承自ConfigApp的常量 $dsn = 'mysql:host=' . self::dbhost . ';dbname=' . self::dbname; $pdo = new PDO($dsn, self::dbuser, self::dbpass); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); return $pdo; } catch (PDOException $e) { print "Database Connection Error!: " . $e->getMessage() . "<br/>"; die(); } } } ?>
正确使用方式
在需要数据库连接的页面中,按顺序引入配置文件和Dbh类,再实例化调用:
<?php include 'config.inc.php'; include 'dbh.class.php'; $dbInstance = new Dbh(); $pdoConnection = $dbInstance->connect(); // 后续使用$pdoConnection执行数据库操作 ?>
额外优化建议
- 若无需强耦合,可去掉继承关系,直接在Dbh中通过
ConfigApp::dbhost访问常量,降低类之间的依赖。 - 开发环境建议开启PHP错误提示:
便于快速定位语法或运行时错误。error_reporting(E_ALL); ini_set('display_errors', 1);
内容的提问来源于stack exchange,提问作者user6738197
相关产品推荐
相关产品推荐

