PHP类中的作用域
我正在创建一个数据库连接对象,我不确定最好的方法是什么 如果我创建一个dbConnection类来建立连接(使用mysql\u connect),那么我可以从主脚本中的任何位置调用mysql\u查询吗 其他班级的学生呢?是否需要将对象或属性作为参数传递 基本上,我正在寻找最好的方法(在速度+内存方面)连接到数据库一次使用一个简单的类 我已经发布了数据库连接类的构造函数:PHP类中的作用域,php,database,connection,scope,Php,Database,Connection,Scope,我正在创建一个数据库连接对象,我不确定最好的方法是什么 如果我创建一个dbConnection类来建立连接(使用mysql\u connect),那么我可以从主脚本中的任何位置调用mysql\u查询吗 其他班级的学生呢?是否需要将对象或属性作为参数传递 基本上,我正在寻找最好的方法(在速度+内存方面)连接到数据库一次使用一个简单的类 我已经发布了数据库连接类的构造函数: function __construct($database="") { if (!empty($database)){ $t
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);
}与其创建自己的数据库抽象类,不如尝试一下。作者在使它易于使用方面做了出色的工作。该类完成的查询返回的数据结构比mysql\u query返回的数据结构灵活得多,这将为您节省大量工作。您几乎做到了。我的数据库类如下所示:
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;
}
}
require 'DB.inc.php';
$GLOBALS['DB'] = new DB('localhost', 'root', '', 'my_database');
global $DB;
$query = 'SELECT UserID, UserName FROM users';
foreach($DB->fetchRows($query) as $user)
echo "$user[UserID]: $user[UserName]\n";
在我的主include文件中,我有如下内容:
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;
}
}
require 'DB.inc.php';
$GLOBALS['DB'] = new DB('localhost', 'root', '', 'my_database');
global $DB;
$query = 'SELECT UserID, UserName FROM users';
foreach($DB->fetchRows($query) as $user)
echo "$user[UserID]: $user[UserName]\n";
然后在项目的任何部分,我都可以运行如下查询:
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;
}
}
require 'DB.inc.php';
$GLOBALS['DB'] = new DB('localhost', 'root', '', 'my_database');
global $DB;
$query = 'SELECT UserID, UserName FROM users';
foreach($DB->fetchRows($query) as $user)
echo "$user[UserID]: $user[UserName]\n";
注意:mysql\u pconnect()不推荐使用,原因请参见用户评论。要执行查询,应将连接对象作为参数传递给查询函数。您需要访问要运行查询的任何位置的连接对象
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();
但是,我更倾向于在DBConnection类中使用mysql_查询作为如下方法:
公共函数查询($query){
$result=mysql\u query($query,$this->link);
返回$result;
}
然后执行以下操作:
$query = "Select * FROM Users";
$con = new DBConnection();
$result = $con->query($query);
// From within SomeClass
$someclass = new SomeClass();
$result = $con->query($someclass->getQuery3());
您不使用PDO或MySQLi库有什么原因吗?如果您使用的是_construct(),那么您必须至少在PHP的v5.x上。