2011-01-29 51 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);