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]
                ";
            }

    }
}

?>

它返回“找不到类'查询'”。它出什么问题了?

编辑:

致命错误:无法在第 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.phporbootstrap.php文件中注册自动加载器,并且每个加载器只执行一次(此功能允许您定义多个加载器,但是当您有第三方库时使用它,它有自己的自动加载器......就像在 SwiftMailer 的情况下) .

PS 请学习在MySQLi 或 PDO中使用准备好的语句。

更新

由于您刚刚学习 OOP,所以这里有几件事可能对您有用:

讲座:

图书:

于 2012-07-07T13:59:20.847 回答
0

从你的代码中删除这一行__autoload("queries"),你不需要调用自动加载器,它会在遇到任何未声明的类时自行调用,如果你的路径是否正确,请使用 require_once 而不是包含和调试。

于 2012-07-07T14:04:05.953 回答