[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопросы по ООП
Страницы: 1, 2
Quieteroks
У меня тоже вопрос по поводу взаимодействия объектов... smile.gif

Взять стандартный класс mysqli. Допустим где то я его создал, подключился к базе данных, но потом в одном из классов необходимо обратиться к этому подключению... Ну вполне стандартная ситуация, на мой взгляд.

Как можно обратиться к экземпляру класса mysqli из под моего класса, если не передавать ссылку (как я понимаю не просто ссылку, а сам объект передаю) в класс при создании:
$temp = new myClass($mysqli);

Или в конструкторе класса через глобальную переменную к нему обратиться...
global $mysqli;
$this->mysqli = $mysqli;

То как еще можно обратиться к методам класса?
И так же если функцию пишу, и нужно в ней использовать запрос, то опять таки, global что ли?
bodja
Quieteroks
Во первых если у вас есть что то в единственном экземпляре вполне логично писать функцию а не класс и обращатся к функции,понятно что сейчас модно писать mysql в классах,но это дело хозяйское.

Второе вы передаете как раз не обьект а указатель (ссылку) на него,так что смертельного в этом тоже ничего нет.

Третье ,все что наследуется принадлежит классу ,поэтому если вы наследуете другой класс ,вы можете перегрузить его методы ,сответстенно получить доступ ко всем наследуемым методам из наследуемых классов.

Четвертое ,почитайте про всякие модные паттерны,возможно там найдете для себя ,что то вкусное.
Michael
Quieteroks, если твой класс работает с БД, то логично например чтобы у него в static private св-ве хранилась ссылка на объект БД. И ссылка эта инициализируется из конструктора, а берется значение - из синглтона или паттерна Registry.

_____________
There never was a struggle in the soul of a good man that was not hard
Quieteroks
bodja и Michael
Неужели вы класс mysqli не слышали?
Это же класс phpшный. Можно юзать и процедурные его методы, но тогда ссылку на подключение нужно везде пихать... Что мне не нравится почему то... Конечно не класс передавать в функции, а только ссылку, но все же.

Пошел читать про паттерны.

И такой вопрос, если свойство статическое, то:
- обращению к ней через имя класса же идет, а не по имени экземпляра?
- если по имени класса, тот при создании двух экземпляров, статическая переменная общая?

Чет нигде этих ответов найти не могу.
Michael
Цитата (Quieteroks)
bodja и Michael
Неужели вы класс mysqli не слышали?

конечно не слышали... ты первый просветил laugh.gif Если уж использовать объектный синтаксис, то лучше PDO все таки.
Цитата (Quieteroks)
- обращению к ней через имя класса же идет, а не по имени экземпляра?

снаружи по имени, внутри - self
Цитата (Quieteroks)
- если по имени класса, тот при создании двух экземпляров, статическая переменная общая?

естественно...

_____________
There never was a struggle in the soul of a good man that was not hard
Quieteroks
Michael и bodja
Спасибо.
Почитал про патерны, синглтон действительно хорошо для этих дел подходит.
А вообще нашел для облегчения, функция синглот для подключения к базе, еще проще и не нужен лишний класс.
BydloCoder
Как сделать, чтобы из класса oop_class2 можно было обратиться к методам класса oop_class без использования глобальных переменных?

index.php
class loader
{
// main class
public function __construct()
{
echo "loader_construct()\n";
}

public function load($classname)
{
if (!isset($this->{$classname})) {
echo "does not exists.. creating...\n";
include("{$classname}.php");
$this->$classname = new $classname();
}
}
}


$loader = new loader();
$loader->load('oop_class');
$loader->load('oop_class2');


oop_class.php
class oop_class
{
public function __construct()
{
echo "oop_construct\n";
}

public function test()
{
echo "TEST!\n";
}

}


oop_class2.php
class oop_class2
{
public function __construct()
{
// Как бы переделать по-другому?
global $loader;
echo "oop_construct2\n";
$loader->oop_class->test();
}
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.