Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/55: Рейтинг темы: голосов - 55, средняя оценка - 4.85
4 / 4 / 1
Регистрация: 03.12.2013
Сообщений: 57

Класс внутри класса

23.01.2014, 13:47. Показов 10147. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть класс взаимодействия с БД.
PHP
1
2
3
class DB {
    //connect, select, update и прочее.
}
Есть общий файл, который подключает все классы и разные настройки. В нем же создается объект класса DB и коннект.
Почему я не могу использовать методы этого класса внутри других классов? Приходится заново создавать объект. Это связано с областью видимости? Тогда как это можно обойти?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2014, 13:47
Ответы с готовыми решениями:

Как правильно вызвать метод класса внутри самого класса?
Здравствуйте. Собственно тема прописана в заголовке: как правильно вызвать метод класса внутри самого класса? Насколько я знаю, для...

Вызов метода одного класса внутри другого класса
PHP передача метода, с класса, в другой класс Столкнулся с проблемой не могу передать метод или функцию с одного класса в другой ...

Использование функции класса внутри другого класса
И снова к нашим баранам.. Я задавал подобный вопрос, но тут возникла такая трабла: есть класс, который подключается извне //подключаем...

8
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
23.01.2014, 14:05
olijen, не силен в ООП. Но может быть передавать объект в конструктор этих классов или наследовать. Попробую сейчас у себя потестировать.

Добавлено через 7 минут
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
<?php
//Некий класс с какими-то методами
class OS {
    static function Ubuntu() {
        return 'Ubuntu<br>';
    }
    
    function Windows() {
        return OS::Ubuntu();
    }
}
 
//Создаем экземпляр
$os = new OS();
 
//Класс в котором используется
//объект $os
class Caller {
    function __construct($os) {
        $this->os = $os;
    }
    
    function callOSMethod() {
        //Вернет «Ubuntu»
        return $this->os->Windows();
    }
}
 
//Передаем аргумент в конструктор класса
$caller = new Caller($os);
 
//Выводим то что вернет метод
echo $caller->callOSMethod();
?>
Добавлено через 53 секунды
Значит все-таки придется передавать в конструктор класса. Мб по ссылке еще можно, сейчас проверю.

Добавлено через 52 секунды
По ссылке тоже работает. Для меня в общем, передача объекта это наверное единственный правильный вариант.
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
23.01.2014, 14:37
olijen, пример кода в студию. Как вызываешь методы?

Добавлено через 1 минуту
Цитата Сообщение от Razip Посмотреть сообщение
Значит все-таки придется передавать в конструктор класса. Мб по ссылке еще можно, сейчас проверю.
Если методы private или protected, то даже и так не сможешь. По ссылке не надо передавать. Php сам за тебя это сделает
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
23.01.2014, 15:24
Цитата Сообщение от olijen Посмотреть сообщение
Почему я не могу использовать методы этого класса внутри других классов?
можете. надо просто хотя бы немного синтаксис поучить.

ну и
http://www.excode.ru/art8297.html
http://ru.wikipedia.org/wiki/S... D%E8%E5%29
0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
23.01.2014, 16:04
Reebka, ну а что стоит ТС'у сделать эти методы public?
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
23.01.2014, 16:55
Цитата Сообщение от Razip Посмотреть сообщение
Reebka, ну а что стоит ТС'у сделать эти методы public?
зачем создавать себе лишние проблемы? Не все методы стоит открывать. Честно.
0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
23.01.2014, 17:08
Reebka, а Вы как предлагаете передавать экземпляр класса в другой класс?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
24.01.2014, 08:59
Цитата Сообщение от olijen Посмотреть сообщение
Это связано с областью видимости? Тогда как это можно обойти?
Не стоит использовать глобальные переменные и обходить ничего не придется

Цитата Сообщение от olijen Посмотреть сообщение
У меня есть класс взаимодействия с БД.
PHP
1
2
3
4
5
6
7
8
9
class Db{
    private $data;
    public function __construct() {
        $this->data='value';
    }
    public function getData(){
        return $this->data;
    }
}
Цитата Сообщение от olijen Посмотреть сообщение
Есть общий файл,
PHP
1
2
3
4
5
6
class GlobalData{
    public static $db;
    public static function init(){
        self::$db=new Db();
    }
}
Использование:
PHP
1
2
3
4
5
/* вызывается один раз в начале программы */
GlobalData::init();
//-------------------
/*использование в любом месте программы*/
echo GlobalData::$db->getData();
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
24.01.2014, 10:51
Razip, так, как вы описали во втором посте. Хорошее решение. Объект будет передан по ссылке и можно будет использовать все public методы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2014, 10:51
Помогаю со студенческими работами здесь

Вбить в переменную данные за пределом класса и достать эти данные внутри класса
$bd =1; class cl { public function __construct() { print_r($bd); } } Как сделать так чтобы вбить в переменную...

Переменные внутри класса
меня интересует как нужно правильно пользоваться переменными внутри класса class A{ private $c,$d; function funct($a){ // his тут...

Псевдопеременная this внутри класса
Скажите пожалуйста, в PHP нужно всегда писать this у переменных ? class MyClass { public $public = 'Public'; protected...

Доступ к переменным внутри класса
чем отличается доступ к объявленной переменной внутри класса указателем $thes-&gt;, от доступа к не объявленной переменной? пример: ...

Передача значений переменных внутри класса.
В результате класс выдает результат 0, без сообщений об ошибках. Что не верно? class arithmetic { var $one = 1; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru