的config.php
<?php
define('DB_HOST', 'localhost');
define('DB_DB', 'db');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '123456');
class.main.php
<?php
class main {
var $host = '';
var $db = '';
var $username = '';
var $password = '';
var $conn = '';
public function __construct() {
$this->host = DB_HOST;
$this->db = DB_DB;
$this->username = DB_USERNAME;
$this->password = DB_PASSWORD;
}
/**
* Connect to database
*/
function connect() {
$this->conn = mysql_connect($this->host, $this->username, $this->password) or trigger_error(mysql_error(), E_USER_ERROR);
mysql_query("SET NAMES 'utf8'");
}
public function myRow($sql) {
mysql_select_db($this->db, $this->conn);
$rec = mysql_query($sql, $this->conn) or die(mysql_error());
$row = mysql_fetch_assoc($rec);
$count = mysql_num_fields($rec);
if ($this->recordCount > 0) {
$result = array();
$temp = array();
do {
for ($i = 0; $i < $count; $i++) {
$name = mysql_field_name($rec, $i);
$temp[$name] = $row[$name];
}
array_push($result, $temp);
} while($row = mysql_fetch_assoc($rec));
} else {
$result = NULL;
}
mysql_free_result($rec);
return $result;
}
}
这是我班级的一部分,如果我想获取数据,就像
<?php
include 'config.php';
include 'class.main.php';
$main = new main;
$main->connect();
$sql = 'SELECT * FROM table';
$row = $main->myRow($sql);
有时我会针对不同的情况制作其他类,有些类可能需要使用myRow
函数,这就是我现在的做法。
class.sub.php
<?php
class sub extends main {
public function __construct() {
parent::__construct();
}
/**
* Get member information
*
* @param integer $id member id
* @return data
*/
public function member($id = NULL) {
$this->connect();
if (NULL === $id) {
$id = $_SESSION['memberId'];
}
$sql = "SELECT *
FROM `members`
WHERE `on` = 1";
return $this->myRow($sql);
}
}
<?php
include 'config.php';
include 'class.main.php';
$main = new main;
include 'class.sub.php';
$sub = new sub;
$main->connect();
$sql = 'SELECT * FROM table';
$row = $main->myRow($sql);
$member = $sub->member();
echo $member['xxx'];
它现在正常工作,我所关心的是我再次调用$ this-&gt;连接member
函数,否则我无法从主类中获取连接,但这意味着我连接到数据库两次页面,它浪费了这样的资源,如何解决?
答案 0 :(得分:1)
要解决此问题,您应阅读“设计模式”。特别是“ Singleton Pattern ”。 通常这种模式在我们制作这样的类时使用。
基本是,在这种模式中,
我们一次只能在整个应用程序中拥有该类的一个对象。
阅读这是一个简单明了的例子。 http://kazymjir.com/blog/singleton-pattern-php-example-tutorial/
答案 1 :(得分:0)
尝试在父类中添加var $conn = NULL;
。
这明确地将其声明为公共变量,并且可以继承。