|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
|||||||||||
Передача private переменных22.06.2019, 11:03. Показов 4760. Ответов 24
Метки нет (Все метки)
Здравствуйте!
Пишу свой класс подключения к БД. Он работает более чем успешно, но проблема в том, что переменная соединения использует private доступ. То есть вызвать из другого класса не получится. protected так же дает отказ по той же причине. public - рабочее решение, но почитав форумы понял, что так делать небезопасно и лучше использовать private. static дает предупреждение, но все исполняет. Сейчас приведу отрывки кода, а потом задам вопрос:
Заранее благодарен!
0
|
|||||||||||
| 22.06.2019, 11:03 | |
|
Ответы с готовыми решениями:
24
Передача интерполяционных переменных Передача переменных методом GET Передача переменных (get/post/.) |
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
||
| 22.06.2019, 11:47 | ||
|
Для этого сейчас используется IoC контейнер, например от Laravel. Можете установить его отдельно и использовать без фреймворка.
Если это пока слишком сложно, тогда гляньте паттерн Синглтон. Добавлено через 7 минут
0
|
||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
|
| 22.06.2019, 11:53 [ТС] | |
|
Jodah, то есть так, как обращаемся к public, обратиться к private и protected не получится? И почему нельзя оставить public? Нет, конечно для тренировки можно и попробовать Синглтон.
0
|
|
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
|||
| 22.06.2019, 13:03 | |||
|
0
|
|||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
|||||||||||
| 22.06.2019, 13:14 [ТС] | |||||||||||
|
Jodah, ну вот сделал по паттерну Сиглтон, но кидает ошибку:
То есть у меня до сих пор нет доступа к переменной подключения, почему?
0
|
|||||||||||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
|
| 22.06.2019, 16:21 | |
|
Uni_programist, здесь $connection не нужна, через get_instance можно сразу объект PDO возвращать.
0
|
|
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
|
||||||||||||||||
| 22.06.2019, 17:38 | ||||||||||||||||
|
Uni_programist, Синглтон правильное решение, но хочу написать просто, чтоб вы понимали. Модификаторы protected или private служит для того, чтоб их не дергали из вне. К примеру, если вы делаете публичное свойство, то вы должны учитывать, что кто-то сможет его изменить из-вне к примеру:
0
|
||||||||||||||||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
||||||||
| 22.06.2019, 21:15 [ТС] | ||||||||
|
sad67man, хотелось бы поддержать дискуссию:
Jodah, модифицируя эту строку так:
0
|
||||||||
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
||
| 22.06.2019, 23:14 | ||
|
1
|
||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
|
||
| 23.06.2019, 00:35 | ||
|
Uni_programist,
Потом если вы пользуетесь ide (к примеру как phpstorm), то он дает разные подсказки, какие у объекта есть свойства и методы, и если там он дает подсказку что есть данное свойство, то это значит, что его будут дергать) И мы сейчас уже обсуждаем суть, если бы у нас был только один такой объект, ведь в проекте их множество, и когда вы сами спустя достаточно большое время возвращаетесь к нему за доработкой, то там уже сложно будет вспомнить что к чему. Чем все строже, тем лучше.
1
|
||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
||||
| 25.06.2019, 00:48 [ТС] | ||||
|
Jewbacabra,
Jodah,
0
|
||||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
||
| 25.06.2019, 13:04 | ||
$this->connection объект PDO сохраняете в self::$_ins, который затем возвращаете.
0
|
||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
||||||
| 25.06.2019, 13:40 [ТС] | ||||||
|
Jodah, Иначе говоря так:
0
|
||||||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
||||||
| 25.06.2019, 21:20 | ||||||
|
Uni_programist, не, я же говорю, $this->connection тут вообще не нужна. Типа такого:
1
|
||||||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
|||||||||||
| 25.06.2019, 22:49 [ТС] | |||||||||||
|
Jodah, требует PDO...
Fatal error: Uncaught Error: Class 'app\core\PDO' not found in /home/f///public_html/app/core/Model.php:8 Stack trace: #0 Но почему ведь PDO это... ? В общем почему-то app\core\PDO Вот файл модели:
0
|
|||||||||||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
||
| 25.06.2019, 23:42 | ||
new \PDO и new PDO, будет работать одинаково.Если указали пространство имён, например App\Library, то new \PDO создаст объект PDO, а код new PDO (без слеша) создаст объект App\Library\PDO.Либо можно добавить в начало кода use PDO, как у вас было изначально и я оставил в своём примере, тогда можно писать new PDO без слеша и PHP поймёт, что речь идёт именно о базовом классе PDO.К слову, в документации всё это расписано простым языком.
0
|
||
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
|||||||||||||||||
| 25.06.2019, 23:55 [ТС] | |||||||||||||||||
|
Jodah,
в модели написал так:
0
|
|||||||||||||||||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
|
| 25.06.2019, 23:59 | |
|
Uni_programist, ещё раз: либо пишем use PDO перед описанием класса, либо пишем просто new \PDO. Посмотрите ещё раз мой пример, он полностью рабочий.
0
|
|
|
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
|
||||||
| 26.06.2019, 00:06 [ТС] | ||||||
|
Jodah, ну скажем так я его и скопировал:
0
|
||||||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
|
| 26.06.2019, 00:16 | |
|
Uni_programist, пройдитесь ещё раз по файлам, возможно что-то где-то не сохранили и осталась прежняя версия. У меня этот код работает.
0
|
|
| 26.06.2019, 00:16 | |
|
Помогаю со студенческими работами здесь
20
Вызов скрипта и передача ему переменных Передача значений переменных внутри класса. Передача функции в качестве переменных другим функциям
Передача private класса в функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|