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

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

23.01.2014, 13:47. Показов 10213. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru