2012-02-19 4 views
0

застрял на этом. Давайте начнем с кода.Обмен переменными между классами при включении файлов

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 

В этом случае его по базе данных varables, поэтому я не должен дублировать код каждый раз, когда я хочу сделать подключение к базе данных.

Как я могу использовать переменные базы данных в другом классе, весь класс, а не только функцию, где он позволяет мне включать?

+0

Учитывая, что я много работаю, то, что мне нравится, - это то, что, как я думал, было бы довольно простым, но из того, что я видел до сих пор, это работа вокруг того, что не поддерживается. –

ответ

0

Я бы включил функцию __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 класс расширением класса настроек.

+0

Это работает, любые проблемы безопасности, о которых я должен знать при использовании этого подхода? –

+0

Единственное, что я могу придумать, это то, что каждый класс, расширяющий 'xmlUpdate', может получить доступ к настройкам db. – Crinsane

0

Возможно, это возможный подход, класс базы данных также может иметь функцию подключения и отключения, запроса и т. Д. Напишите функцию __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"; 
+0

Я все еще очень новичок в oop и не понимаю, что такое 'DataBase :: getInstance();' is :: bit, что это имя, чтобы я мог его посмотреть? –

+0

Класс DataBase - это так называемый singleton. Это означает, что при закрытии __construct мы предотвращаем нечто вроде новой базы данных из другого класса. Единственный способ доступа к объекту DataBase - это вызов статического метода getInstance -> DataBase :: getInstance(). – busypeoples

0

вы могли бы сделать их статическими или следовать одноплодной шаблон

-1

Я думаю, что вы пытаетесь сделать, это есть GLOBAL типа вещи вы можете получить доступ из любой точки мира.

Как предлагает пользователь busypeoples, вы можете попробовать использовать шаблон singlton, если хотите включить некоторые сложные действия для базы данных, такие как соединения. Посмотрите шаблон singleton, и вы наверняка сможете найти некоторые конкретные примеры 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 
     } 

    } 
Смежные вопросы