i think that Observer pattern is always implemented as "static" to be called from any scope, for example:
<?php
class Observer {
//attach here the caller's scope
private static $stackTrace = array( );
public static function wasTriggeredOnce() {
//...if is not in the stack, then:
self::$stackTrace[] = max( debug_backtrace( ) );
}
}
class YourFramework {
public function launchPlatform() {
//could not let user to launch application twice!
Observer::wasTriggeredOnce();
}
}
//cause is static
Observer::hereIsnoNeedToInstantiateAgain();
?>
PHP.mk документација
SplSubject::attach
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
splsubject.attach.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
splsubject.attach.php
SplSubject::attach
Референца за `splsubject.attach.php` со подобрена типографија и навигација.
SplSubject::attach
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
SplSubject::attach — Attach an SplObserver
= NULL
Attaches an SplObserver so that it can be notified of updates.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
Оваа функција моментално не е документирана; достапна е само листата со аргументи.
Вратени вредности
Не се враќа вредност.
Белешки од корисници 2 забелешки
workspace dot development at yahoo dot com ¶
пред 14 години
goran ¶
пред 14 години
The most obvious storage type for observers (stored in attach()) is array. In order to be able to detach attached objects, you should be able to identify it inside observer storage.
I suggest you attach observers this way:
$this->_observers[spl_object_hash($observer)] = $observer;
so you can detach it later if you need:
unset($this->_observers[spl_object_hash($observer)]);