PHP OOP 数据库连接使用带有类和函数的单独配置文件

问题描述 投票:0回答:1

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.

php oop
1个回答
0
投票

ConfigApp
类中,您定义了Class Constants,而不是属性。因此,正如该文档所解释的那样,访问它们的语法是不同的。图案是:

self::constantname

所以在你的情况下,你需要

self::dbhost

现场演示:https://3v4l.org/XjCeU

因此您在

connect()
中的代码将是

$dsn = 'mysql:host=' .self::dbhost . ';dbname=' . self::dbname;
$pdo = new PDO($dsn, self::dbuser, self::dbpass);

附言

return $pdo;
函数中
connect()
之后的所有内容都是多余的,因为无法执行
return
之后的代码,并且在任何情况下都不需要定义连接两次!

此外,似乎没有必要通过

Dbh
类的构造函数传递新的数据库连接值,因为您打算从
ConfigApp
类常量中读取它们。

© www.soinside.com 2019 - 2024. All rights reserved.