2012-07-07 43 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,如果你的路徑正確與否。