Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
165 / 150 / 58
Регистрация: 15.06.2013
Сообщений: 1,107

Расширение класса PDO

24.11.2014, 06:25. Показов 2515. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я пытаюсь расширить класс PDO и столкнулся с такой проблемой:
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
class myPDO extends PDO {
        function __construct () {
            try {
                $dsn = "mysql:host=localhost;dbname=twokings";
                $opt = array(
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
                );
                $PDO = new PDO($dsn, 'root', '', $opt);
                return $PDO;
            }
            catch(PDOException $e) {
                echo "<h1>Произошла ошибка при подключении к базе данных!<h1>";
                exit;
            }
        }
        
        function query($sql, $params, $return = true) {
            try {
                print_r (get_class_methods($this));
                $STM = $this -> prepare($sql);
                $STM -> execute($params);
                if($return) {
                    $result = $STM -> fetchAll();
                    return $result;
                };
            }
            catch(PDOException $e) {
                echo "$e -> getMessage()";
                exit;
            }
        }
}
PHP
1
2
3
4
5
include 'myPDO.php';
$PDO1 = new myPDO();
$sql = "SELECT * FROM `a` WHERE `id` = ?";
$result = $PDO1 -> query($sql, array('10'));
print_r($result);
При выполнении появляется ошибка: Warning: PDO:: prepare(): SQLSTATE[00000]: No error: PDO constructor was not called in N:\OpenServer\domains\2kings\myPDO.php on line 23. Я так понимаю что не выполнился родительский конструктор, но как он не выполнился, если я содал экземпляр PDO?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2014, 06:25
Ответы с готовыми решениями:

Объект класса с подключением PDO
Есть класс для подключения с БД (используется PDO). В этом же классе есть основные ф-ии для работы с БД. Подключаюсь нормально. Теперь...

Выполнение запросов PDO внутри класса
Здравствуйте. Недавно начал практиковаться писать сайты на PHP. Столкнулся с проблемой: не могу выполнить запросы к базе внутри класса....

Расширение класса
В обще-то нужно получить в промежуточном классе значение. Не обязательно в функции, можно просто создать какую переменную. class Staff...

7
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
24.11.2014, 08:26
Вы вообще откуда про ооп услышали ? Почитали бы хоть что-нибудь для приличия.
0
165 / 150 / 58
Регистрация: 15.06.2013
Сообщений: 1,107
24.11.2014, 08:56  [ТС]
Это моя первая попытка что-то начать делатьс использованием ООП. Я абсолютно уверен что там написано все плохо, криво и неправильно. И для того чтобы с этим разобраться я и пришел сюда. Был бы очень благодарен, если бы вы помогли мне в этом более дельными советами.
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
24.11.2014, 09:01
"расширяют" или наследуют вот так
PHP
1
2
3
4
5
class MyPDO extends PDO{
    public function __construct($dsn, $username, $passwd, $options) {
        parent::__construct($dsn, $username, $passwd, $options);
    }
}
из конструктора ничего не нужно возвращать. Если вы хотели в свой класс зашить обработку ошибок связанных с созданием объекта - то не получилось. При создании в коде программы объекта PDO (или его наследника) конструкцию содержащую new нужно заключать в try - catch. Никуда не деться от этого
1
165 / 150 / 58
Регистрация: 15.06.2013
Сообщений: 1,107
24.11.2014, 11:10  [ТС]
Спасибо! Да, один из вариантов это обработка ошибок. Но ведь вызов метода не нужно будет оборачивать в обработчик ошибок? Достаточно будет внутри метода его описать?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
24.11.2014, 11:48
Цитата Сообщение от MadHatter Посмотреть сообщение
Достаточно будет внутри метода его описать?
тогда вообще пропадает смысл в генерации исключений и их дальнейшей обработки. достаточно того что метод вернет false, например, или грохнется с die(). А конструктор вообще ничего не возвращает.. как обрабатывать ошибки внутри конструктора если объект не создан?
0
Software Engineer
 Аватар для Custos
332 / 336 / 55
Регистрация: 23.09.2014
Сообщений: 999
24.11.2014, 13:57
Цитата Сообщение от MadHatter Посмотреть сообщение
Спасибо! Да, один из вариантов это обработка ошибок. Но ведь вызов метода не нужно будет оборачивать в обработчик ошибок? Достаточно будет внутри метода его описать?
1) Регистрируем свой handler для исключений.
2) Радуемся.

http://php.net/manual/ru/funct... andler.php
1
165 / 150 / 58
Регистрация: 15.06.2013
Сообщений: 1,107
24.11.2014, 16:28  [ТС]
Цитата Сообщение от ads Посмотреть сообщение
как обрабатывать ошибки внутри конструктора если объект не создан?
Так я же не про конструктор, я про методы.
Цитата Сообщение от Custos Посмотреть сообщение
1) Регистрируем свой handler для исключений.
2) Радуемся.
Спасибо. Учту.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2014, 16:28
Помогаю со студенческими работами здесь

Расширение класса (наследование)
Есть класс, которому в качестве параметров передаются некие переменные, а именно - параметры соединения с БД.$options = array( 'user' ...

Подключение к бд через PDO расширение
Правильно ли я делаю подключение базы? Если нет то исправьте меня &lt;?php function db_connect() { $host = 'localhost'; ...

Расширение класса
Добрый день. При помощи методов расширения можно добавить метод классу, а как добавить свойство? Вот например, я хочу чтобы у...

Расширение методов std класса
Есть ли способ расширить функционал класса без создания нового? std::vector arr; arr.myErase( std::begin() + 5); только...

Расширение метода класса... как?
Если создать класс b на основе класса a, то при инициализации сначала исполнится метод New класса a, а потом класса b. Как также сделать и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru