在类中使用外部变量

时间:2012-06-05 17:27:48

标签: php

我有一个目录结构:

app
cofig
 config.php
classes
 db.class.php
index.php 

的config.php:

<?php

define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', ''); 
define('DB_NAME', 'db_name');  

db.class.php:

<?php 
include "config/config.php";

class DB {

private $conn;
private $results;

public function __construct() {

$this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);//**This doesn't work**
mysql_select_db(DB_NAME, $this->conn);
}

}
?>

当我尝试在index.php中创建$ db类的实例时,我得到错误(无法在类中获取DEFINED变量)

4 个答案:

答案 0 :(得分:3)

拥有此目录结构:

app
config
 config.php
classes
 db.class.php
index.php 

会强制您使用:include('../config/config.php');或定义一个绝对的PATH,它会转到根目录并执行:include(PATH.'config/config.php');

您的include "config/config.php";被解释为include('root/classes/config/config.php'),我认为它不存在。

正如Samy建议的那样,你应该通过构造函数传递给类的常量,这样你就可以使用同一个类与不同的数据库变量进行多次连接。

而且,不建议再使用mysql或mysqli函数。了解PDO。

答案 1 :(得分:2)

假设目录结构中的“config”是拼写错误,请使用:

include("../config/config.php");

答案 2 :(得分:2)

根据你的目录结构包含路径应​​该是'../config/config.php'。 由于您使用的是include,因此不会抛出致命错误并继续执行代码,无论是否包含文件。 在这里,您的文件不包含在代码中。试试这个

  <?php 
include "../config/config.php";

class DB {

    private $conn;
    private $results;

    public function __construct() {

        $this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);//**This doesn't work**
        mysql_select_db(DB_NAME, $this->conn);
     }

 }
?>

答案 3 :(得分:1)

将这些变量作为参数传递给您的类,无论如何它都更干净。

class DB {
    public function __construct($host, $dbName, $user, $password) {
        $this->conn = mysql_connect($host, $user, $password);
        mysql_select_db($dbName, $this->conn);
    }
}

new DB(DB_HOST, DB_NAME, DB_USER, DB_PASS);

顺便说一句,mysql_ functions are in the process of being deprecated