0

私はこれを機能させることができません。

<?php


        function __autoload($classname){
            include 'inc/classes/' . $classname . '.class.php';
        }



__autoload("queries")

$travel = new queries();
echo $travel->getPar("price");

?>

これが inc/classes/queries.class.php ファイルです。

<?

 class queries {

        function getPar($par, $table='travel', $type='select') {

            $result = $db->query("
             $type *
             FROM $table
             WHERE
             $par LIKE
            ");
            while ($row = $result->fetch_assoc()) {

                return "
                 $row[$par]
                ";
            }

    }
}

?>

「クラス 'queries' not found」を返します。どうしたの?

編集:

致命的なエラー: 行 5 の /index.php で __autoload() (以前に /index.php:5 で宣言されたもの) を再宣言できません

なんてこったい?独自の行で既に宣言されている関数を再宣言することはできません。なぜですか?

4

3 に答える 3

2

そうしてみてください(クラスの自動ロードなし):

function __autoload($classname){
    include_once 'inc/classes/' . $classname . '.class.php';
}
$travel = new queries();

こちらのリンクもご覧ください

于 2012-07-07T13:07:13.843 に答える
1

その恐ろしい嫌悪感の代わりに、次の使用方法を学ぶ必要がありますspl_autoload_register()

spl_autoload_register( function( $classname ){

    $filename = 'inc/classes/' . $classname . '.class.php';

    if ( !file_exists( $filename) ){
        throw new Exception("Could not load class '$classname'.". 
                            "File '$filename' was not found !");
    }

    require $filename;

});

index.phpまたはファイルにオートローダーを登録し、ローダーbootstrap.phpごとに1回だけ実行する必要があります(この機能により複数のローダーを定義できますが、独自のオートローダーを持つサードパーティのライブラリがある場合に使用されます.. SwiftMailerの場合のように) .

PSは、MySQLiまたはPDOで準備されたステートメントを使用することを学んでください。

アップデート

あなたは今 OOP を学んでいるので、役立つと思われるいくつかのことを以下に示します。

講義:

書籍:

于 2012-07-07T13:59:20.847 に答える
0

コードからこの行を削除し__autoload("queries")ます。オートローダーを呼び出す必要はありません。宣言されていないクラスに遭遇するたびに自動的に呼び出され、パスが正しいかどうかにかかわらず、インクルードとデバッグの代わりにrequire_onceを使用します。

于 2012-07-07T14:04:05.953 に答える