找不到类OOP的类

时间:2012-07-07 13:04:01

标签: php oop autoloader

我无法让它发挥作用。

<?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中声明)

到底是什么?我不能重新声明已经在自己的行中声明的函数,为什么?

3 个答案:

答案 0 :(得分:2)

尝试(不使用类自动加载):

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

另见link

答案 1 :(得分: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.phpbootstrap.php文件中注册自动加载器,并且每个加载器只执行一次(此功能允许您定义多个加载器,但是当您拥有第三方库时使用该加载器,它有自己的自动加载器..就像SwiftMailer一样。)

P.S。请学习使用MySQLi或PDO 准备好的陈述

<强>更新

由于您刚刚学习OOP,因此您可能会发现以下几点非常有用:

讲座:

书籍:

答案 2 :(得分:0)

从代码__autoload("queries")中删除此行,您不需要调用自动加载器,只要遇到任何未声明的类,它就会自动调用它,如果路径正确或者使用require_once而不是include和debug不