Demiurg
Guest
Во втором случае имеет смысл использовать агрегацию
Иногда для работы методы не требуются значения атрибутов объекта. В этом случае можно обращаться к нему даже не имея экземпляра объекта. Синтаксис ты привел.Автор оригинала: Varg
a::foo()
Если происходит обращение к методу объекта A, а тот в свою очередь вызывает другой метод объекта B, то это делегирование.И что есть Делегирование и агрегация?
class Foo { // extends Bar, Buzz
var $bar;
var $buzz;
function Foo() {
$this->bar = new Bar();
$this->buzz = new Buzz();
}
function doBar() {
$this->bar->doBar();
}
function doBuzz() {
$this->buzz->doBuzz();
}
}
...как один из возможных механизмов. Не нужно забывать, что в общем случае агрегация добавляет лишнюю операцию в коде -- если конечно оптимизатор ее не отбросит.Автор оригинала: Demiurg
Во втором случае имеет смысл использовать агрегацию
Это Crazy привел классический пример делегирования. А кто нибудь совмещал агрегирование и делегирование? Я пробовал вроде бы нормально, но во это неудобство при работе с делегатами:-| всегда нужно явно указывать объект метод которого ты хочешь использовать....Автор оригинала: Crazy
PHP:class Foo { // extends Bar, Buzz var $bar; var $buzz; function Foo() { $this->bar = new Bar(); $this->buzz = new Buzz(); } function doBar() { $this->bar->doBar(); } function doBuzz() { $this->buzz->doBuzz(); } }
class Foo extends Ext {
var $bar;
var $buzz;
function Foo() {
$this->Ext();
$this->bar = new Bar();
$this->buzz = new Buzz();
}
function doBar() {
$this->bar->doBar();
}
function doBuzz() {
$this->buzz->doBuzz();
}
function doExt() {
$this->doExt();
}
}
Это и есть агрегация и делегирование.Автор оригинала: sokol
Это Crazy привел классический пример делегирования. А кто нибудь совмещал агрегирование и делегирование?
Особенно интересный этот методАвтор оригинала: sokol
PHP:function doExt() { $this->doExt(); }
Интересно.. как ПХП обработает этот участок кода.. Или бесконечный цикл, или своеобразное перекрытие..Автор оригинала: sokol
PHP:function doExt() { $this->doExt(); }
function doExt() {
parent::doExt();
}
function doExt() {
Ext::doExt();
}
function doExt() {
static $c=2;
return $c--?$this->doExt():0;
}
Обратите внимание на надпись "редактировать"Screjet
Ага! Именно! Просто торопился!Автор оригинала: .des.
Screjet ты не слышал о рекурсии?
вообще конечно в примере скорее всего имелось ввиду что то вроде
PHP:function doExt() { parent::doExt(); }
Ага! Именно! Просто торопился!Автор оригинала: .des.
Screjet ты не слышал о рекурсии?
вообще конечно в примере скорее всего имелось ввиду что то вроде
PHP:function doExt() { parent::doExt(); }
Еще раз: мой пример иллюстрирует одновременное применение делегирования и агрегации.Автор оригинала: sokol
2Crazy - ну да агрегация и делегирование... я же для этих целей пример и привел.
Вот это new Bar() это как? Bar() негде не определён как быvar $bar;
var $buzz;
function Foo() {
$this->bar = new Bar();
$this->buzz = new Buzz();
}