2012-07-07 66 views
0

我无法得到这个工作。找不到该类别PHP OOP

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

    } 
} 

?> 

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

编辑:

致命错误:不能重新声明中的index.php __autoload()(以前在/index.php:5申报)在第5行

什么是地狱?为什么我不能重新声明已经声明的函数?

+0

请不要用无意义的内容污染你的问题,以避免“太多的代码,没有足够的散文”限制。 – 2012-07-07 13:06:08

+0

@Michael那么还有什么可以做的?限制在一般情况下可能是有意义的,但在这种情况下,它阻止了先验有效问题的提出。 – 2012-07-07 13:07:39

+0

我已经编辑了它,我对此没有任何担心:) – djpredator17 2012-07-07 13:09:24

回答

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文件中注册自动加载器,并且每个加载程序只执行一次(此abilit y允许你定义多个加载器,但是当你有第三方库时,它有自己的自动加载器,就像SwiftMailer一样)。

P.S.请学习使用准备好的语句与MySQLi或PDO。

更新

既然你现在刚刚学OOP,这里有几件事情,你可能会发现有用:

讲座:

书籍:

+0

我刚刚开始使用OOP,准备好的语句会晚一点,但真的非常感谢您的建议:) – djpredator17 2012-07-07 14:20:09

+0

@ djpredator17,增加了几个链接,可能会帮助你 – 2012-07-07 17:02:25

+0

如果我可以投你的帖子,我会做至少两次:) ty太多了! – djpredator17 2012-07-08 00:02:19

2

尝试这样(无级自动加载):

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

也看到这个link

+0

我照你的建议做了,但我们回到了“找不到类查询”的问题。 – djpredator17 2012-07-07 13:10:05

+0

我建议函数__autoload,但你使用函数加载,并在函数中__autoload - var_dump($ classname) - 可能与路径的麻烦。 – yAnTar 2012-07-07 13:16:38

+0

致命错误:无法在第4行的inc/classes/queries.class.php中重新声明类查询 这是第一次声明它的行(不再有第二次...) – djpredator17 2012-07-07 13:18:11

0

从你删除此行代码__autoload("queries"),你不需要调用自动加载它会被它调用sel f每遇到任何未声明的类,并使用require_once而不是include和debug,如果你的路径正确与否。