Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
62 / 29 / 5
Регистрация: 20.11.2009
Сообщений: 193
1

Не работает вызов метода PDO в дочернем классе

03.05.2011, 14:54. Показов 2334. Ответов 1
Метки нет (Все метки)

Есть класс:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Device 
{
    public static $device = array('id', 'name', 'type', 'buyDate', 'sealPeriod',
        'sealExpDate', 'owner', 'outOfOrder', 'OutOfSeal', 'invNumber', 'serialNumber'); 
    protected static $dbh;
   
    function __construct()
    {
        $hostname = 'localhost';
        $dbhname   = 'devicedb';
        $username = 'root';
        $password = '';
    
        try {
            self::$dbh = new PDO("mysql:host=$hostname; dbname=$dbhname", $username, $password);
                                            
            echo 'Соединение с базой данных <b>' . $dbhname . '</b> успешно установлено.';
            self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$dbh->exec('SET CHARACTER SET utf8');
            self::$dbh->exec('SET NAMES utf8');
        } catch (PDOException $e) {
            echo "Ошибка подклчючения: ".$e->getMessage()." ". $e->getCode();
            die();
        }
        $result = null;
        $limit = null;
        $id = null;
    } # конец конструктора.
    
    static function getDevices($limit,$id){
        $pattern = 'SELECT * FROM  devices';      
        if (isset($limit) || $limit != null){ 
            $pattern .= ' LIMIT =?';
            $params   = array ($limit);
        } else if (isset($id)|| $id !=null){
            $pattern .= ' WHERE id =?'; 
            $params   = array($id); 
        }
        var_dump($params,$pattern);//debug
        $result = self::$dbh->prepare($pattern); 
        $result->execute($params);
        $result->setFetchMode(PDO::FETCH_ASSOC);
        self::$device = $result;
    }
}
вызываю функцию getDevices в дочернем классе:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class DeviceList extends Device  {
    var $limit;
    var $id;
    
    private $header = array(
        'header_id'           => "Идентификатор",
        'header_name'         => "Устройство",
        'header_type'         => "Тип устройства",
        'header_bdate'        => "Дата покупки",
        'header_seal'         => "Гарантия (месяцев)",
        'header_sealexp'      => "Дата окончания гаранти",
        'header_owner'        => "Владелец",
        'header_outoforder'   => "Списан",
        'header_outofseal'     => "Вне гарантии",
        'header_invnumber'    => "Инвентарный номер",
        'header_serial'          => "Серийный номер"
    );//
    function __construct(){
      
    }# конец конструктора
    
    public function makeTable($limit,$id){
        $this->id=$id;
        $this->limit=$limit;
        $table = parent::getDevices($this->limit,$this->id);
    }
   //дальше функции которые занимаются внешним видом
 
}
Суть такая, при обращении к этой функции
PHP
1
2
$table = new DeviceList();
$table->makeTable(null,1);
Возникает ошибка: Fatal error: Call to a member function prepare() on a non-object in ...\Device.php on line 41

При работе с этим методом в родительском классе
PHP
1
2
$computer = new Device();
$computer->getDevices(null,1);
- все ОК.

Пробовал мудрить с вариантом объявить в родительском классе не статический метод - не хочет работать pdo. Перечитал пару раз FAQ, но так и не понял где я туплю.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2011, 14:54
Ответы с готовыми решениями:

Вызов статического метода класса в другом классе
Как вызвать статический метод из одного класса в другом? вот этот код не работает class A{...

Получить родительский класс в дочернем классе
Здравствуйте. Подскажите пожалуйста есть следующие классы class A { #methods } class B...

Метод в дочернем классе не возвращает значение
Не могу разобраться с кодом, в родительском классе есть метод который возвращает свойство $var1, ...

Вызов виртуальной функции, определённой в дочернем классе, через указатель на базовый класс
Как вызвать виртуальную функцию, определённую в дочернем классе, через указатель на базовый класс?...

1
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
03.05.2011, 19:25 2
В конструкторе дочернего класса надо вызвать конструктор родительского класса:
PHP
1
parent::__construct();
иначе статический член $dbh никогда не будет создан.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2011, 19:25

R6025 pure virtual function call при вызове метода, реализованного в дочернем классе
Всем привет. Вот такая ошибка у меня возникает при вызове метода, который реализован в дочернем...

Вызов метода не определенного в классе
Доброго времени суток. Волей судьбы необходимо разобраться в одной программе написанной на perl....

Вызов метода в классе из другого
Не получается выполнить следующую цепочку действий. Запускаю метод в классе B через main, он...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.