包含文件时在类之间共享变量

时间:2012-02-19 22:16:07

标签: php oop class

坚持这一点。让我们从代码开始。

的settings.php

class settings{

public $db_host;
public $db_username;
public $db_password;
public $db_database;

public function db_settings(){

    /*$db_host = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_database = "eveonline";*/

    $this->db_host = "localhost";
    $this->db_username = "root";
    $this->db_password = "";
    $this->db_database = "eveonline";
}

这是我想要使用的地方

class xmlUpdate{

    include_once ('./lib/settings.php'); //This wont work
    public $itemCount;

    public function dbItemCount(){
    include_once ('./lib/settings.php');// This will work, but only in this function

在这种情况下,它用于数据库变量,所以每当我想建立数据库连接时,我都不必重复代码。

如何在另一个类中使用数据库变量,整个类,而不仅仅是它允许我包含的函数?

4 个答案:

答案 0 :(得分:0)

我会将include放入类的__construct()函数中,实例化一个新类,读出变量,将它们放在类中的局部变量中。

class xmlUpdate{

    public $db_host;
    public $db_username;
    public $db_password;
    public $db_database;


    function __construct(){
        include_once('./lib/settings.php');
        $settings = new settings();

        $this->db_host = settings->db_host;
        $this->db_username= settings->db_username;
        $this->db_password= settings->db_password;
        $this->db_database= settings->db_database;

    }

}

或者你可以让xmlUpdate类扩展设置类。

答案 1 :(得分:0)

这可能是一种可能的方法,Database类也可以具有连接和断开连接,查询等功能。编写__autoload函数,这样就不必包含任何文件。另一种简单的方法是定义index.php中的所有数据 - > define('DB_HOST','localhost');然后通过DB_HOST访问它。

class DataBase {

    private static $instance = null;
    public $db_host;
    public $db_username;
    public $db_password;
    public $db_database;

    private function __construct() {
      $this->db_host = "localhost";
      $this->db_username = "root";
      $this->db_password = "";
      $this->db_database = "eveonline";
    }

    private function __clone() {

    }

    public static function getInstance() {

        if (self::$instance === null) {
            self::$instance = new DataBase;
        }
        return self::$instance;
    }
}

class Xml {

  protected $db;

  public function __construct() {
     $this->db = DataBase::getInstance();
  }

  public function getUsername() {
    return $this->db->db_username;
  }

}


// test 

$xml = new Xml;
print $xml->getUsername() . "\n";

答案 2 :(得分:0)

您可以将它们设为静态或遵循单例模式

答案 3 :(得分:-1)

我认为你要做的是有一些 GLOBAL 类型的东西,你可以从任何地方访问。

正如用户busypeoples建议的那样,如果要为数据库包含一些复杂的行为(如连接),可以尝试使用单一模式。查看单例模式,你一定能找到一些PHP特定的例子。

如果您只想为数据库共享一些简单的连接字符串,密码和用户,那么您可以使用define语句。


    //the db_info.php file
    define( 'DB_NAME', 'mydevdatabase' );
    define( 'DB_IP', '127.0.0.1' );
    define( 'DB_USER', 'bob' );
    define( 'DB_PASSWORD', 'password' );

之后,您可以在任何PHP文件的开头包含此文件并使用常量。


    //some other php file
    require_once( 'db_info.php' );
    class Test
    {
        public function tester()
        {
            $some = DB_IP;
            $other = DB_USER;
            //your other code
        }

        public function otherfunction()
        {
            $some = DB_IP;
            $other = DB_USER;
            //your code
        }

    }