PHP sınıfları kapsam

3 Cevap php

Ben bir veritabanı bağlantı nesnesi oluşturma, ve ben en iyi yolu ne olurdu emin değilim ...

Ben (mysql_connect kullanarak) bağlantı kurar DbConnection sınıf oluşturmak varsa o zaman her yerde ana komut gelen mysql_query arayabilirim?

ne DİĞER sınıfları içinde yaklaşık? I nesne geçmek ya da parametre olarak atfetmek gerekir mi?

Temelde, ben KEZ basit sınıfını kullanarak veritabanına bağlanma (hız + bellek açısından) en iyi yol arıyorum ...

Ben Veritabanı Bağlantısı sınıf için benim kurucu gönderdiniz:

function __construct($database="") {
if (!empty($database)){ $this->db = $database; }
$this->dblink = mysql_connect($this->host,$this->username,$this->password);
if (!this->dblink) {
	//Fatal Error
}
mysql_select_db($this->db, $this->dblink);

}

3 Cevap

Kendi veritabanı soyutlama sınıfı oluşturmak yerine, ben ezSQL bir deneyin vererek tavsiye ederim. Yazar kullanımı çok kolay yapma mükemmel bir iş yaptı. Sınıf tarafından yapılan sorgulardan dönen veri yapıları çok daha esnek mysql_query tarafından döndürülen daha vardır ve size bir sürü iş kaydetmek istiyorsunuz.

Neredeyse oradayız. Benim veritabanı sınıfı böyle bir şey gider:

class DB {
  function __construct($host,$user,$pass,$db) {
    // error checking has been removed for brevity
    $this->mysql = mysql_connect($host,$user,$pass);
    mysql_select_db($this->mysql, $db);
  }
  function fetchRows($query) {
    // error checking removed again
    $result = mysql_query($this->mysql);
    $return = array();
    while($data = mysql_fetch_assoc($result))
      $return[] = $data;
    mysql_free_result($result);
    return $return;
  }
}

Benim ana içerme dosyası olarak, o zaman böyle bir şey var:

require 'DB.inc.php';
$GLOBALS['DB'] = new DB('localhost', 'root', '', 'my_database');

Ve sonra benim proje herhangi bir yerinde böyle bir sorgu çalıştırabilirsiniz:

global $DB;
$query = 'SELECT UserID, UserName FROM users';
foreach($DB->fetchRows($query) as $user)
    echo "$user[UserID]: $user[UserName]\n";

Notes: mysql_pconnect () önerilmemektedir, neden bazı nedenlerden dolayı manual page kullanıcı yorumları görmek.

Eğer bir sorgu çalıştırmak istediğiniz zaman, sorgu işlevi için parametre olarak bağlantı nesnesi geçmelidir. Her yerde bir sorgu çalıştırmak istediğiniz bağlantı nesnesine erişim gerekir.

require_once DBConnection;
require_once SomeClass;

$con = new DBConnection();
$query = "Select * FROM Users";
mysql_query($query, $con->link);

// Use the connection in another class that takes a connection object in the constructor
$someclass = new SomeClass($con);
$someclass->executeQueryThree();

Ancak, ben bu yüzden böyle bir yöntem olarak DbConnection sınıf içinde bir mysql_query olması daha eğilimli olurdu:

public function query($query) { $result = mysql_query($query, $this->link); return $result; }

Ve sonra şunları yapın:

$query = "Select * FROM Users";
$con = new DBConnection();
$result = $con->query($query);

// From within SomeClass
$someclass = new SomeClass();
$result = $con->query($someclass->getQuery3());