<?php
/** Object responsible for echoing debug data **/
class EchoLogger implements \SplObserver
{
public function update($data) { echo $data . PHP_EOL; }
}
/** Object responsible for emailing debug data **/
class EmailLogger implements \SplObserver
{
public function update($data) { /** Mail your data **/ }
}
class HttpClientService implements \SplSubject
{
private $observers = array();
public function getRand()
{
return $this->rand;
}
public function getStatus()
{
return $this->status;
}
public function attach(\SplObserver $observer)
{
$this->observers[] = $observer;
}
public function detach(\SplObserver $observer)
{
if($key = array_search($observer,$this->observers, true))
{
unset($this->observers[$key]);
}
}
public function notify()
{
foreach ($this->observers as $observer)
{
$observer->update($this);
}
}
public function getServiceStatus()
{
// -- SNIP --
$this->rand = rand(0, 10);
$this->status = ($this->rand >= 5) ? 'success' : 'error';
// -- Snip --
return $this->status;
}
}
$service = new HttpClientService;
$service->attach(new EchoLogger);
Fatal error: Declaration of EchoLogger::update($data) must be compatible with SplObserver::update(SplSubject $SplSubject) in /in/RIO71 on line 4
Process exited with code 255.
Fatal error: Declaration of EchoLogger::update() must be compatible with SplObserver::update(SplSubject $SplSubject) in /in/RIO71 on line 5
Process exited with code 255.
Output for 5.3.0 - 5.3.29
Fatal error: Declaration of EchoLogger::update() must be compatible with that of SplObserver::update() in /in/RIO71 on line 5
Process exited with code 255.
Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.17
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 10
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 15
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 29
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 34
Fatal error: Declaration of EchoLogger::update() must be compatible with that of SplObserver::update() in /in/RIO71 on line 4
Process exited with code 255.
Output for 5.0.5
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 10
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 15
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 29
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 34
Fatal error: Interface 'SplObserver' not found in /in/RIO71 on line 4
Process exited with code 255.
Output for 5.0.0 - 5.0.4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 10
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 15
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 29
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/RIO71 on line 34
Fatal error: Class 'SplObserver' not found in /in/RIO71 on line 4
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting '{' in /in/RIO71 on line 4
Process exited with code 255.