2011-01-29 91 views
0

時,我有2班(2個文件)問題延伸的PHP類

db.class.php
user.class.php

我想使用一些功能從db.class.php

db.class.php

 

Class DBManager { 

     /** all functions goes here ...*/ 

} 
$DB = new DBManager(); 
 

user.class.php的內容是:

 


Class User extends DBManager { 
    function User() { 

    } 

    function Total($table) { 
     $query = $DB->Execute("SELECT * FROM $table"); 
     $total = $DB->NumRows($query); 
     return $total; 
    } 


} 

$User = new User(); 
 

當我想用我的新功能合計($表)我得到2個錯誤:

Undefined variable: DB in ..\class\user.class.php on line 14


Fatal error: Call to a member function Execute() on a non-object in ..\class\user.class.php on line 14

我包括2類像我的main.php文件:



 
include 'class/db.class.php'; 
include 'class/user.class.php'; 


編輯1:

相關崗位:best trick when using an extending class (PHP)

+0

*(參考)* [類和對象 - 基礎知識(http://de2.php.net/manual/en/language.oop5.basic。 php) – Gordon 2011-01-29 10:49:41

+0

你爲什麼不使用PHP5語法的任何原因?如果你在那裏學習一個教程,你應該得到一個更新的教程。 – Gordon 2011-01-29 10:51:47

+0

@戈登:我已經有我的課了。我在這裏有一個問題。這是什麼參考? – Cheerio 2011-01-29 10:52:17

回答

0

那是什麼$ DB?你從來沒有設定任何目標,因此,即使你有這些文件,你不能達到,取決於你的db.class.php可變

,你可能需要實例某種$ DB的這樣

$DB = new db(); 

(無論是在功能本身,或者在使用$this->DB用戶類的構造函數)

嘗試這樣的事:

Class User extends DBManager { 
    private $DB; 

    function User() { // should be __construct() really 
     $this->DB = new DBManager(); 
     $this->DB->Connect(); 
    } 

    function Total($table) { 
     $query = $this->DB->Execute("SELECT * FROM $table"); 
     $total = $this->DB->NumRows($query); 
     return $total; 
    } 


} 

$User = new User(); 
1

好了,你們s,$DB沒有被定義/在Total功能範圍內。
如果$DB是該班的一個屬性,您需要訪問$this->DB。更新後


更新:

你實例化DBManager到全局變量$DB。該變量僅在全局範圍內。它不能在任何其他範圍內自動使用,如內部函數。是否User繼承自DBManager是完全不相關的,實例化變量$DB不在任何函數內的範圍內。

有一種懶惰的方式來訪問global範圍內的變量,但我不打算在這裏提及。正確的方法是,以實例$DBUser類成員,或者通過它在實例User

class User { 

    protected $DB = null; 

    public function __construct($DB) { 
     $this->DB = $DB; 
    } 

    public function Total() { 
     $this->DB->… 
    } 
} 

$DB = new DBManager(); 
$user = new User($DB); 
1

要調用父類的功能,所以嘗試somenthing像

function Total($table) { 
     $query = parent::Execute("SELECT * FROM $table"); 
     $total = parent::NumRows($query); 
     return $total; 
    } 

我想和如果doesnt't工作嘗試的this代替parent

PHP parent codumentation

0

看起來你對繼承的工作方式感到困惑。子類繼承父類的public和protected成員和方法。因此,在您給出的示例中,您應該使用$this->Execute("SELECT * FROM $table")$this->NumRows($query)。雖然和NumRows函數未在User類中定義,但它們位於DBManager類中,因此您可以像訪問User中定義的那樣訪問它們。

0

我的問題的解決方案是:

 

$query = DBManager::Execute("SELECT * FROM $table"); 
$total = DBManager::NumRows($query);