【问题标题】:Using external variables in classes在类中使用外部变量
【发布时间】:2012-06-05 17:27:47
【问题描述】:

我有一个目录结构:

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 变量)

【问题讨论】:

  • 确切的错误是什么?
  • 这应该可以工作....你确定你有require_once()'d config.php 吗?
  • 你使用了错误的配置文件还是它只是一个类型 o?您已导入 db.config 但在 config.php 中定义了变量
  • 我已经编辑了代码,这是一个错字

标签: php


【解决方案1】:

有这个目录结构:

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。

【讨论】:

  • 你是对的,但包括不是解决方法,我仍然无法从 db 类中获取定义的 DB_ 变量
【解决方案2】:

假设您的目录结构中的“cofig”是一个错字,请使用:

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

【讨论】:

  • 好的,即使修复了,它也无法从类中访问 DB_HOST、DB_PASS 等
  • 是的,我可以,在类定义之前。但无法从 db 类中访问它们
  • 在构造函数中移动包含行。
  • 解决了问题吗?如果是这样,您可以将此答案标记为正确,以便其他人知道问题已解决。
  • 不幸的是,这不是原因;真正的原因是以这种方式将评论放在开头
【解决方案3】:

根据你的目录结构包含路径应​​该是'../config/config.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);
     }

 }
?>

【讨论】:

    【解决方案4】:

    将这些变量作为参数传递给你的类,这样更简洁。

    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

    【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多