Как правильно вызывать методы одного объекта в другом объекте?

Aly

Новичок
Как правильно вызывать методы одного объекта в другом объекте?

Как правильно(удобней в дальнейшем) вызывать методы одного объекта в другом объекте. То есть есть созданный объект, следом создаётся другой объект, который использует методы первого объекта. Я передаю конструктору 2ого объекта, экземпляр 1ого. Яновичок в ООП и вот хотел бы поинтересоватсьа не будет ли это черевато в дальнейшем?

Пример кода 2ого объекта:
PHP:
<?php
class tpl{
private $lang;

public function __construct($lang){
	$this->lang = $lang;
}

public function get_tplpath($tpl){
	if(!file_exists($tpl)){
		echo "'TPL: file doesn't exists($tpl)";
		die();
	}
return $tpl;
}

public function get_special_template($tpl, $txt){
    $tpl=$this->get_tplpath($tpl);
    $txt['lang']=$this->lang->get_lang();
    $txt=$this->lang->make_lngurl($txt);
return $txt;
}
}
?>
 

Гравицапа

elbirret elcno
Aly
1. echo "'TPL: file doesn't exists($tpl)";
Откуда $tpl приходит?
2.
PHP:
$txt['lang']=$this->lang->get_lang(); 
$txt = $this->lang->make_lngurl($txt);
Объясни вот эти две строчки
 

WP

^_^
Aly
Покури паттерны типа Singleton. Хотя я юзаю статические переменные :)
 

Aly

Новичок
1. $tpl приходит из вызова метода get_special_template($tpl, $txt), в своё время в этот метод этот аргумент попадает из вызова сформулированного программистом.

2. Ну у нас есть приватная переменная "$lang", в которую при создании экземпляра класса "tpl" присваиваеться переданный в аргументах экземпляр класса 'languages'.

WP
~
Ты делаешь экземпляры статическими? И как я понимаю этим добиваеш "видимости" этих объектов внутри других.. я правеьно понял?

Singleton? а ссылочку можно , а то я слабо представлаю что это..
 

hermit_refined

Отшельник
Aly
вы не сказали, чем именно вам не нравится то, что у вас сейчас есть.
по теме - http://wiki.agiledev.ru/doku.php?id=ooad:dependency_injection

P.S. эти две строчки я тоже не понял:
PHP:
$txt['lang']=$this->lang->get_lang(); 
$txt = $this->lang->make_lngurl($txt);
P.P.S. я бы не советовал злоупотреблять синглетонами.
 

WP

^_^
Aly
Да. У меня есть
class xE
{
static $first;
static $second;
// ...
}
Им присваиваю объекты, и они видны как xE::$first, xE::$second из любого места. Так я поступаю с основными объектами такими как $tpl (шаблонизатор), $db (база данных) и прочими.

-~{}~ 19.03.07 18:33:

з.ы. Singleton мне не нравится тем что требует лишнего вызова функции это лишнее процессорное время.
Можно еще в классе делать статическую переменную $obj и обращаться db::$obj->... но эти те же яйца только сбоку.
 

Aly

Новичок
;) Не надо искать смысл в моём кода, тут 90% вырезанно. Оставил только как пример конструктора и стиля применения экземпляра полученого при создании данного объекта.

По поводу того что мне не нравится в моём нынешнем примере: собсна по этому и спрашиваю вдруг потом боком вылезет такая передача экземпляра, возможно не нравится тем что непривык к ООП и таким записям..

WP
~
Вот, наверно что-то типа класса xE я и искал. Приочень благодарен.
 

WP

^_^
Передача экземпляра в метод Imho неправильный подход. Т.к. слишком много телодвижений требует.
 

hermit_refined

Отшельник
Передача экземпляра в метод Imho неправильный подход
передача объекта через конструктор - очень даже правильный подход.
и одно дело - советовать Singleton человеку, который использует глобальные переменные.
другое - когда у него (исходя из представленного) вполне нормальная Strategy.
требует лишнего вызова функции это лишнее процессорное время
в ООП-темах такого рода замечания насчет процессорного времени - заведомо off-topic.
 
Сверху