1

私はPHP OOPが初めてです。以下は私のVERY FIRSTクラスファイルです。このコードに柔軟性を追加し、関数を追加してクエリを実行し、後で使用するために結果 (fetch_assoc/fetch_array のいずれか) を配列 (または var など) に割り当てることもできます。


クエリの実行で私が抱えている問題は、両方のクラスをまとめることができないことです (ネスト?): $db->Query->Select('myTable');OR $db->Query->Select('myTable')->Where($pageID);OR$db->Query->Select('myTable')->Where($pageID)->OrderBy('name');


また、このコードで何か間違ったことをしている場合や、改善のための提案がある場合はお知らせいただければ幸いです。そうすれば、将来的により良いphpクラスを書くことができます=)。

<?php
require( $_SERVER['DOCUMENT_ROOT'] . '/database/database-connection-info.php');
 //This file (database-connection-info.php) contains $config[];

class db {
    private $db;
    private $type = 'read-only';
    //$config['db']['dbh']          = Database Host
    //$config['db']['dbn']          = Database Name
    //$config['db'][$type]['dbu']   = [User type][user name]
    //$config['db'][$type]['dbp']   = [User type][password]


    public function __construct($type = null) {
        global $config;
        $this->config = $config;
        $this->Connect($type);
    }


    public function Connect($type) {
    global $config;
        switch( $type ) {
        case 'admin':
        $this->type = 'admin';
        $this->db = mysql_connect( $this->config['db']['dbh'] , $this->config['db'][$type]['dbu'] , $this->config['db'][$type]['dbp'] );
        return $this->db;

        default:
        $this->type = 'read-only';
        $type = 'read';
        $this->db = mysql_connect( $this->config['db']['dbh'] , $this->config['db'][$type]['dbu'] , $this->config['db'][$type]['dbp'] );
        return $this->db;
        }
    }


    public function Close() {
        mysql_close();
        mysql_close($this->db);
        $this->type = 'Closed';
    }


    public function Type() {
        return "<b>Database connection type</b>: " . $this->type . "<br/>";
    }


    public function Status() {
        if( !@mysql_stat($this->db) )
             { return "<b>Database connection status</b>: There is no database connection open at this time.<br/>"; }
        else { return "<b>Database connection status</b>: " . mysql_stat($this->db) . "<br/>"; }
    }
}

//For testing purposes
$db = new db(admin);
echo $db->Type();
echo $db->Status();
echo $db->Close();
echo $db->Status();
echo $db->Type();
?>
4

1 に答える 1

3

2 つの重要な改善点:

  • 構成にグローバルを使用しないでください。代わりに、構成をコンストラクターに渡します。これにより、グローバルをハックすることなく、db オブジェクトを他のデータベースにインスタンス化できます。

  • ネイティブの [非推奨] ライブラリの使用をやめ、 PDOMySQLimysql_*などの最新の API に切り替えます。これは、特にあなたの場合、ネイティブの観点から来ているため、優れた PDO チュートリアルです。mysql_*

私もこれに気づきました:

$db = new db(admin);

PHP はadminここで定数を探しますが、見つからず、文字列adminが意図されたものであると見なします。として定義された定数があった場合、adminそこで奇妙な動作を観察するでしょう (または、とにかく文字列だと思うかもしれません)。文字列に変更します。

$db = new db('admin');
于 2012-11-14T10:03:25.783 に答える