EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7369SMITHCLERK790280-12-1780020
7499ALLENSALESMAN769881-02-20160030030
7521WARDSALESMAN769881-02-22125050030
7566JONESMANAGER783981-04-02297520
7654MARTINSALESMAN769881-09-281250140030
7698BLAKEMANAGER783981-05-01285030
7782CLARKMANAGER783981-06-09245010
7788SCOTTANALYST756682-12-09300020
7839KINGPRESIDENT81-11-17500010
7844TURNERSALESMAN769881-09-081500030
7876ADAMSCLERK778883-01-12110020
7900JAMESCLERK769881-12-0395030
7902FORDANALYST756681-12-03300020
7934MILLERCLERK778282-01-23130010

<?php
class Template
{
    
/**
     * リソースを開く
     */
    
function open()
    {
    }

    
/**
     * データを取得する
     */
    
function get()
    {
    }

    
/**
     * 結果を表示する
     */
    
function show()
    {
    }

    
/**
     * リソースを閉じる
     */
    
function close()
    {
    }

    
/**
     * 処理の枠組み
     */
    
function process()
    {
        
$this->open();
        
$this->get();
        
$this->show();
        
$this->close();
    }
}

/**
* DBデータの表示
*/
class DbDisplay extends Template
{
    var 
$conn_;
    var 
$stmt_;
    var 
$data_;
    var 
$rows_;

    function 
open()
    {
        
$this->conn_ OCILogon("scott""tiger""orcl");
    }

    function 
get()
    {
        
$this->stmt_ OCIParse($this->conn_"SELECT * FROM emp");
        
OCIExecute($this->stmt_);
        
$this->rows_ OCIFetchStatement($this->stmt_$this->data_);
    }

    function 
show()
    {
        echo 
"<table border=\"1\">";
        echo 
"<tr>";
        while (list( 
$key$val ) = each$this->data_ ) ) {
            echo 
"<th>$key</th>";
        }
        echo 
"</tr>";

        for ( 
$i 0$i $this->rows_$i++ ) {
            
reset($this->data_);
            echo 
"<tr>";
            while ( 
$column each($this->data_) ) {
                
$data $column['value'];
                echo 
"<td>$data[$i]</td>";
            }
            echo 
"</tr>";
        }
        echo 
"</table>";
    }

    function 
close()
    {
        
OCIFreeStatement($this->stmt_);
        
OCILogOff($this->conn_);
    }
}
/**
* ファイルデータの表示
*/
class FileDisplay extends Template
{
    var 
$fp_;
    var 
$buf_;

    function 
open()
    {
        
$this->fp_ fopen(__FILE__"r");
    }

    function 
get()
    {
        while (!
feof($this->fp_)) {
            
$this->buf_ .= fgets($this->fp_4096);
        }
    }

    function 
show()
    {
        
highlight_string($this->buf_);
    }

    function 
close()
    {
        
fclose($this->fp_);
    }
}
?>
<?php
    
/**
     * main
     */
    
$arr = array(new DbDisplay(), new FileDisplay());
    foreach (
$arr as $index => $obj) {
        
$obj->process();
        echo 
"<hr>";
    }
?>