无法将变量从函数传递给类

时间:2014-02-26 01:04:00

标签: php database oop pdo

我有一个db连接函数和一个抽象数据库类,因为我构造它的方式。我必须将我的PDO连接代码添加到构造函数中。

我的config.php我有

function dbconnect() 
{
            $dbh; // database handler
             $host = 'localhost';
             $user =  'root';
             $pass =  '';
             $dbname = 'test101';
             $error;
                // Set DSN
                $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
                // Set options
                $options = array(
                    PDO::ATTR_PERSISTENT    => true,
                    PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_EMULATE_PREPARES => false

                );
                // Create a new PDO instanace
                try{
                    $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
                }
                // Catch any errors
                catch(PDOException $e){
                    $this->error = $e->getMessage();
                }

           }

在我的abstract.class.php

 include_once('config/config.php');

class Database {


           public function __construct() {
               dbconnect(); //connect to database

           }

           public function query($query) {
               $this->stmt = $this->dbh->prepare($query);
           }

}
$database = New Database();

不在config.php中我有一个dtabase处理程序$dbh而在abstract.class.php我在查询函数中调用它。

我的问题

我收到错误Undefined property: Database::$dbh。如何将我的config.php传递给abstract.class.php?我想当你使用PHP包含时,这与复制和粘贴你想要用它的文件中该文件中的任何内容相同。如何将$dbh从config.php传递给abstract.class.php,请随时就可能发生的任何问题向我提出建议,或者与我的PDO连接有关安全问题的任何问题。

如果我在构造函数中复制并传递我的函数并在构造函数外部将数据库连接变量设置为private $dbh;,这是有效的,但问题是当我不需要时总是必须包含该类它。有时我可能只需要连接到数据库,我也想将define salt添加到config.php

1 个答案:

答案 0 :(得分:1)

在你的数据库类中,你调用$ this-> dbh,所以在你的dbconnect函数中, return $dbh,然后在数据库类构造函数中:$this->dbh = dbconnect();