Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP OOP中找不到类_Php_Oop_Autoloader - Fatal编程技术网

在PHP OOP中找不到类

在PHP OOP中找不到类,php,oop,autoloader,Php,Oop,Autoloader,我不能让它工作 <?php function __autoload($classname){ include 'inc/classes/' . $classname . '.class.php'; } __autoload("queries") $travel = new queries(); echo $travel->getPar("price"); ?> 这是inc/classes/querys.

我不能让它工作

<?php


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



__autoload("queries")

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

?>

这是inc/classes/querys.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中声明)

怎么回事?我无法重新声明已在其自己的行中声明的函数,为什么?

请尝试这样做(无类自动加载):

另请参见此

试试看(不自动加载类):


还可以看到这一点,你应该学会如何利用:

您应该在
index.php
bootstrap.php
文件中注册自动加载器,并且每个加载器只注册一次(此功能允许您定义多个加载器,但当您有第三方库时,会使用此功能,该库有自己的自动加载器..就像SwiftMailer一样)

另外,请学习在MySQLi或PDO中使用准备好的语句

更新

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

讲座:

书籍:


你应该学会如何利用:

您应该在
index.php
bootstrap.php
文件中注册自动加载器,并且每个加载器只注册一次(此功能允许您定义多个加载器,但当您有第三方库时,会使用此功能,该库有自己的自动加载器..就像SwiftMailer一样)

另外,请学习在MySQLi或PDO中使用准备好的语句

更新

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

讲座:

书籍:



从您的代码中删除这一行
\uuuu autoload(“查询”)
,您不需要调用autoloader,它将在遇到任何未声明的类时自行调用,并使用require\u一次,而不是在路径正确与否的情况下使用include和debug。

从您的代码中删除这一行
\uu autoload(“查询”)
,您不需要调用autoloader,它将在遇到任何未声明的类时自行调用,并使用require_一次,而不是include和debug(如果路径正确与否)。

请不要用无意义的内容污染您的问题,以免绕过“代码太多,散文不够”的限制。@Michael,还有什么要做的?这个限制在一般情况下可能是有意义的,但在这种情况下,它阻止了一个先验的有效问题被提出。我已经编辑了它,我不担心:)@djpredator 17:你的php配置了吗?请不要用无意义的内容来污染你的问题,以免绕过“代码太多,散文不够”的限制。@Michael,还有什么要做的?这个限制在一般情况下可能是有意义的,但在这种情况下,它阻止了一个先验的有效问题被问到。我已经编辑了它,我不担心:)@djpredator 17:你的php配置了吗?我按照你的建议做了,但我们回到了“未找到类查询”的问题。我建议函数自动加载,但是你在函数中使用了函数load并使之成为函数_autoload-var_dump($classname)-可能路径有问题。致命错误:无法在inc/classes/querys.class.php的第4行重新声明类查询这是我第一次声明它的行(没有第二次…)不要使用call _uautoload(“查询”)而是包含使用include\u onceeen即使我只包含一次文件(正确),它也无法识别类。我按照您的建议做了,但我们回到了“未找到类查询”问题。我建议函数自动加载,但您使用函数加载,并在函数自动加载-var\u dump($classname)中这样做-路径可能有问题。致命错误:无法在inc/classes/querys.class.php的第4行重新声明类查询这是我第一次声明它的那一行(没有第二次…),不要使用call\u autoload(“查询”),而是使用use include\u onceen,即使我只在文件中包含了一次(正确),我刚开始使用OOP,准备好的语句会晚一点出现,但非常感谢你的建议:)@djtradapter17,添加了一些可能对你有帮助的链接,如果我能投票支持你的帖子,我会至少做两次:)太多了!有一行我忘了加上:。从我看来,大多数PDO教程都非常糟糕,而且充满了错误/可注入代码。我刚开始使用OOP,准备好的语句会晚一点出现,但非常感谢您的建议:)@djtradator 17,添加了一些可能对您有帮助的链接如果我能投票支持您的帖子,我至少会做两次:)太多了!有一行我忘了加上:。从我看来,大多数PDO教程都非常糟糕,并且充满了错误/可注入代码。
function __autoload($classname){
    include_once 'inc/classes/' . $classname . '.class.php';
}
$travel = new queries();
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;

});