-1

ブログのさまざまなビューを表示するクラス。

class SB_Display {

    public function __contruct() {
        include_once('settings/db.settings.php');

        $mysqli = new mysqli($SB_dbsettings['host'],$SB_dbsettings['user'],$SB_dbsettings['pass'],$SB_dbsettings['dbname']);
    }

    private function List_Display() {

        $VIEW = '';

        include_once('views/list.html.view.php');

        $sql = "SELECT * FROM sb_posts ORDER BY ID DESC LIMIT '$SETTINGS->maxposts'";
        $sql = $mysqli->real_escape_string($sql);
        $res = $mysqli->mysqli_query($sql);

        if($res->numrows > 0) {
        $res->data_seek(0);

            while ($row = $res->fetch_assoc()) {
                foreach($row as $key => $value) {
                $BLOG->$key = $value;
                $VIEW .= $HTML;
                }
            }
        } else {
            $VIEW .= 'No Posts To Display';
        } 

        return $VIEW;
    }


    private function Single_Display($id) {
        $VIEW = '';

        include_once('views/single.html.view.php');

        $sql = "SELECT * FROM sb_posts WHERE BID = '$id'";
        $sql = $mysqli->real_escape_string($sql);
        $res = $mysqli->mysqli_query($sql);
        $row = $res->fetch_assoc();

        foreach($row as $key => $value) {
            $BLOG->$key = $value;
        }

        $VIEW .= $HTML;

        return $VIEW;
    }


    private function Create_Display() {        
        include_once('views/create.html.view.php');
        return $HTML;
    }

    private function Edit_Display($id) {
        $VIEW = '';  

        $sql = "SELECT * FROM sb_posts WHERE BID = '$id'";
        $sql = $mysqli->real_escape_string($sql);
        $res = $mysqli->mysqli_query($sql);
        $row = $res->fetch_assoc();

        foreach($row as $key => $value) {
            $BLOG->$key = $value;
        }
        $BLOG->id = $id;
        $VIEW .= $HTML;

        return $VIEW;

    }


    public function SB_Get_Display($type,$id) {
        switch($type) {
         case 'list':
             $this->content = List_Display();
             return $this;
             break;
         case 'single':
             $this->content = Single_Display($id);
             return $this;
             break;
         case 'create':
             $this->content = Create_Display();
             return $this;
             break;
         case 'edit':
             $this->content = Edit_display($id);
             return $this;
             break;
        }
    }
}

このクラスを次のように使用する場合..

$BODY = new SB_Display();
$BODY->SB_Get_Display('list','');

このエラーが発生します:

致命的なエラー:未定義の関数List_Display()の呼び出し

理由がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

4

メソッドを呼び出す$this->function()代わりにを使用する必要があります。function()

ちなみに、コンストラクター関数名が正しくありません。ただし、コンストラクターとして使用する__contruct()必要があります。__construct()それに加えて、インデントはひどく、コードが読みにくくなります。

于 2012-05-31T21:38:49.090 に答える
0

@Corbinに同意します。それは非常に悪い考えです。また、個人的には、autoload クラスのアプローチが気に入っています。

ずさんで簡単な方法だと言う人もいるかもしれませんが、クラス名とディレクトリについて本当に考える必要があり、さらにファイル/クラスの名前を変更するときの問題を回避できます。あなたの場合、それを含めようとするすべてのファイルを検索し、手動ですべての名前を変更する必要があります。

「私の」アプローチ: サイトのルートに inc.php などを作成し、これを入れます。

PHP

//autoload classes
function __autoload($class_name){
    set_include_path(get_include_path().PATH_SEPARATOR.'/usr/share/file/'); //also     
    //include magic file location
    // put the path to your class files here
    $path = $_SERVER['DOCUMENT_ROOT'].'/lib/classes/'; 
    // tell PHP to scan the default include path AND your include path
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    // name your classes and filenames with underscores, i.e., Net_Whois stored in 
    //Net_Whois.php
    $classfile = str_replace("_", DIRECTORY_SEPARATOR, $class_name) . ".php";
    require_once($classfile);
}

inc.php ファイルでも db 接続を初期化するだけで、どこからでもアクセスできます。

作成するすべての新しいクラスに inc.php ファイルを含めるだけで、もう一度振り返る必要はありません (もちろんプロジェクトによって異なります)。

于 2012-05-31T22:00:20.437 に答える