PHP类继承父问题

时间:2014-01-14 05:05:36

标签: php

的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函数,否则我无法从主类中获取连接,但这意味着我连接到数据库两次页面,它浪费了这样的资源,如何解决?

2 个答案:

答案 0 :(得分:1)

要解决此问题,您应阅读“设计模式”。特别是“ Singleton Pattern ”。 通常这种模式在我们制作这样的类时使用。

基本是,在这种模式中,

我们一次只能在整个应用程序中拥有该类的一个对象。

阅读这是一个简单明了的例子。 http://kazymjir.com/blog/singleton-pattern-php-example-tutorial/

答案 1 :(得分:0)

尝试在父类中添加var $conn = NULL;

这明确地将其声明为公共变量,并且可以继承。