PHP-вызов статической функции завершается неудачно - PullRequest
1 голос
/ 22 января 2012

All

Я получаю сообщение об ошибке с кодом ниже. Вот сообщение об ошибке, которое я получаю:
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

1 Ответ

2 голосов
/ 22 января 2012

Это не проблема со статической функцией.Проблема в том, что в PHP нет неявного $this.Когда вы ссылаетесь на переменную-член в классе (как в userInfoExists), вы должны сказать $this->userDAO, а не просто $userDAO.

Конечно, все это предполагаетКласс DAO_DBrecord имеет или наследует функцию checkRecordExists.Если этого не произойдет, у вас будут другие проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...