所有
我收到以下代码的错误。这是我收到的错误消息:
Notice: Undefined variable: userDAO in C:\wamp\www\Projetv0.2\Model_User.php on line 15
然后
Fatal error: Call to a member function checkRecordExists() on a non-object in C:\wamp\www\Projetv0.2\Model_User.php on line 15
相关代码如下。我尝试对代码做的是有一个唯一的类(DAO_DBrecord
)来访问数据库中的几个表。在下面的例子中,我想访问我的users
表。为此,我在createUserDAO
类中创建了一个特定的静态函数DAO_DBrecord
,该函数使用正确的表名users
调用构造函数。但是,它不起作用,我无法理解为什么。
Model_User.php:
<?php
require_once('Class_DB.php');
require_once('DAO_DBrecord.php');
class Model_user{ // Represents a connection to the users table in the DB
private $db;
private $userDAO;
function __construct($db){
$this->db=$db;
$userDAO=DAO_DBrecord::createUserDAO($this->db);// static function - calls constructor w/ 'user' table name parameter
$this->userDAO=$userDAO;
}
function userInfoExists($userInfo, $colName){
return $userDAO->checkRecordExists($userInfo, $colName);
}
//Other stuff
}
?>
DAO_DBrecord.php:
<?php
require_once('Class_DB.php');
class DAO_DBrecord {
private $db;
private $table;
private function __construct($db,$table){
$this->db=$db;
$this->table=$table;
}
public static function createUserDAO($db) {
return new DAO_DBrecord($db, 'users');
}
//Other stuff
}
?>
谢谢大家的帮助!
JDelage
答案 0 :(得分:2)
这不是静态功能的问题。问题是PHP没有隐式$this
。当您在班级中引用成员变量时(就像您在userInfoExists
中一样),您必须说$this->userDAO
而不仅仅是$userDAO
。
当然,所有这些都假设DAO_DBrecord
类具有或继承了checkRecordExists
函数。如果没有,你将遇到其他问题。