Объекты - возможность использования свойств и методов

core

Guest
Объекты - возможность использования свойств и методов

Суть проблемы заключаестся в том, что я к примеру создаю объект, ну на пример многим известный $smarty.

каким образом я могу использовать методы и свойства объекта $smarty, ну сделать как бы глобальным(сделать доступными все свойства и методы объекта $smarty в любом другом КЛАССЕ), чтобы можно было передать в другой КЛАСС свойства и методы! И вообще это возможно.

Требования: не используя наследование.

Заранее спасибо.
 

inTox

вёбных дел мастер
тебе незачем "передавать"(что ты имел ввиду, кстати?) свойства и методы. ты можешь использовать свой объект как компонент другого. Посылаю к Бадду: http://grizlyk.chat.ru/badd/9.htm#t00
 

core

Guest
Автор оригинала: inTox
тебе незачем "передавать"(что ты имел ввиду, кстати?) свойства и методы. ты можешь использовать свой объект как компонент другого. Посылаю к Бадду: http://grizlyk.chat.ru/badd/9.htm#t00
Ну в класс mysql мне нужно передать методы smarty(для того чтобы вынуть из конфига переменные)

вот к примеру

class mysql {

mysql_connect($smarty->get_config_vars["host"] . . . .)
}

И. Т. Д.
 

svetasmirnova

маленький монстрик
Никак. Только в качестве параметра. Или сделай передаваемый класс синглтоном
 

core

Guest
синглтоном - ты имеешь в виду наследование если не это напиши строчку.
 

Domovoj

Guest
Автор оригинала: core
Ну в класс mysql мне нужно передать методы smarty(для того чтобы вынуть из конфига переменные)

вот к примеру

class mysql {

mysql_connect($smarty->get_config_vars["host"] . . . .)
}

И. Т. Д.
Несколько вариантов, но похоже они все основаны на шаблоне Singleton (почитай в соседних топиках):
a) либо сам $smarty ты должен сделать синглтоном, и вместо $smarty = new Smarty() делать $smarty = Smarty::getInstance();
b) либо сделать какой либо класс (что нибуть типа ClassFactory) и добавить туда этот static метод getInstance(), а доступ к объекту smarty получать через ClassFactory::getInstance();

В крайнем случае GLOBALS никто не отменял, но только сойдёт если ты это для себя пишешь и отлаживать никогда потом не собираешься. :)
 

core

Guest
$smarty = Smarty::getInstance();
после этой строчки я смогу написать так как выше я написал?
 

svetasmirnova

маленький монстрик
core
почитай про синглтоны. У тебя получится что-то вроде:
class mysql {
function foo(){
$smarty = Smarty::getInstance();
mysql_connect($smarty->get_config_vars["host"] . . . .)
}
}
 

core

Guest
$smarty = Smarty::getInstance(); - он создает объект??
если это так тогда:

Это плохо зачем создовать еще раз объект !!!
тем более smarty engine!!!
можно подругому??
 

svetasmirnova

маленький монстрик
core
Ещё раз: прочитай про синглтоны и фабрику. Это есть даже в PHP-мануале.
Smarty::getInstance() возвращает ссылку на единожды созданный объект.
 

core

Guest
ок спасибо

-~{}~ 26.08.05 11:13:

Автор оригинала: svetasmirnova
core
Ещё раз: прочитай про синглтоны и фабрику. Это есть даже в PHP-мануале.
Smarty::getInstance() возвращает ссылку на единожды созданный объект.
Странно. Синглтоны в мануале? как называется раздел??
 

core

Guest
(php4)
это мне позволит работать с данными таким образом
внутри класса application
application <-- action
application <--> language
application <--> mysql
mysql <--> language

-~{}~ 26.08.05 11:46:

мне то всего то нужно чтобы объект smarty был доступен в любых КЛАССАХ. Там чтото написанно я так и не понял зачем столько всего для доступа? Есть такой пример чтобы было четко: вот создал объект, вот использую свойства этого объекта в классе???
 

svetasmirnova

маленький монстрик
А подумать 5 минут сложно?
PHP:
class MySmarty extends Smarty {
public static function getInstance() {
//Singletone code here
//Заботишься о том, чтобы возвращался всегда 1 объект
}
}
И обращаешься далее по коду:
PHP:
MySmarty::getInstance()->nativeSmartyMethod();
 

core

Guest
Автор оригинала: svetasmirnova
А подумать 5 минут сложно?
PHP:
class MySmarty extends Smarty {
public static function getInstance() {
//Singletone code here
//Заботишься о том, чтобы возвращался всегда 1 объект
}
}
И обращаешься далее по коду:
PHP:
MySmarty::getInstance()->nativeSmartyMethod();
А я сказал насследование не использовать
 

svetasmirnova

маленький монстрик
>А я сказал насследование не использовать
А я сказала минуту подумать
PHP:
class Factory {
public static function getSmartyInstance() {
//Singletone code here
//Заботишься о том, чтобы возвращался всегда 1 объект
} 
}
//
Factory::getSmartyInstance()->nativeSmartyMethod();
 

core

Guest
Автор оригинала: svetasmirnova
>А я сказал насследование не использовать
А я сказала минуту подумать
PHP:
class Factory {
public static function getSmartyInstance() {
//Singletone code here
//Заботишься о том, чтобы возвращался всегда 1 объект
} 
}
//
Factory::getSmartyInstance()->nativeSmartyMethod();
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in D:\www\setup.php on line 13

извени что так долго соображаю наверное старость
//Singletone code here это что
//Заботишься о том, чтобы возвращался всегда 1 объект и это что?
Просто с объектами не так давно начал работать вроде усвоил азы но как стал создавать модули вот этот вопрос задел
 
Сверху