2012-08-29 81 views
0

我現在基本上有3個重要的文件。 我想在LOGIN類中使用DB類中的函數。 這些是我的文件。我嘗試了包括DB類,但接下來我會聲明它兩次,你不能這樣做。在另一個類PHP中使用一個類,不包括

---- ---- index.php的 - 它顯示的內容 -

<?php 
    session_start(); 


include './libs/database.php'; 

$mysql = new Database(); 

include './libs/login.php'; 

$login = new Login(); 

$mysql->connect("---", "user", "pass"); 
$mysql->usedatabase("db"); 

    ?> 

<!DOCTYPE html> 
    <html> 
     <body> 
      <div id="wrapper"> 

          CONTENT GOES HERE 

      </div>   
     </body> 

    </html> 
--- 


---login.php --- 

    class Login{ 

     public function isLoggedIn(){ 

      if(isset($_SESSION['user_id'])){ 

       return true; 

      }else{ 
       return false; 
      } 
     } 


     public function UserLogin($email,$password){ 
      // login function 
         $DB->selectwhere(...); 
     } 

     public function securePassword($pass){ 

      $pass = md5($pass); 

       return $pass; 
     } 
    } 

--- 



--- database.php --- 

class Database{ 


     //Database Functions 


} 
+5

你能不能只使用require_once或include_once http://uk.php.net/include_once 還是看你如何組織你的類和傳遞引用您的數據庫類或使用靜態類 – TommyBs

+0

我不知道爲什麼人們使用包括反正。即使沒有核心文件,執行也不應該繼續。使用require_once或自動加載。但請記住,_once部分會增加一些開銷,並且它很混亂,所以您最好了解自動加載和[PSR-0](https://github.com/php-fig/fig-standards/blob/master/如果可能,接受/ PSR-0.md)。 – ChocoDeveloper

回答

2

查找到PHP的 「自動加載」 功能。實際上,只有當它們不在堆中時,纔可以按需查詢課程。

+0

有了這個,我得到一個錯誤,說「$ mysql是未定義的」,並且「調用一個非對象的成員函數selectwhere()」 – user1633873

0

將您的數據庫類移至文件Database.php。在index.php的頂部,使用require_once('Database.php');包括數據庫類。然後改變用戶登陸()函數以這樣的:

public function UserLogin($email,$password){ 
     // login function 
        $DB = new Database; 
        $DB->selectwhere(...); 
    } 
0

閱讀PHP.net文檔有關關鍵字延伸:http://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends

一個類可以通過使用關鍵字繼承另一個類的方法和屬性>在類聲明中擴展。

所以您的登錄類將是

class Login extends Database{ 

    public function isLoggedIn(){ 

     if(isset($_SESSION['user_id'])) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 


    public function UserLogin($email,$password){ 
     parent::login(); 
    } 

    public function securePassword($pass){ 
     $pass = md5($pass); 
     return $pass; 
    } 
} 

可以使用

parent::var_name 
parent::method() 
+0

這是要走的路,但我也會看看合併這個解決方案的答案是Stephen305。擴展課程時,確保課程確實已經加載完成是一種很好的做法,否則會遇到麻煩。這當然假定這些類將在單獨的文件中。 – j5Dev

0

充分利用securePassword()函數在登錄一個靜態函數所以訪問數據庫類的屬性或方法你可以在沒有Login類的實例的情況下調用它。

登錄:: securePassword()