Merge pull request #135 from bocharsky-bw/patch-1

Replace array storage with SplObjectStorage
This commit is contained in:
Dominik Liebler 2015-06-01 11:47:23 +02:00
commit 7e707cc0fc
2 changed files with 21 additions and 11 deletions

View File

@ -36,11 +36,20 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
public function testAttachDetach()
{
$subject = new User();
$this->assertAttributeEmpty('observers', $subject);
$reflection = new \ReflectionProperty($subject, 'observers');
$reflection->setAccessible(true);
/** @var \SplObjectStorage $observers */
$observers = $reflection->getValue($subject);
$this->assertInstanceOf('SplObjectStorage', $observers);
$this->assertFalse($observers->contains($this->observer));
$subject->attach($this->observer);
$this->assertAttributeNotEmpty('observers', $subject);
$this->assertTrue($observers->contains($this->observer));
$subject->detach($this->observer);
$this->assertAttributeEmpty('observers', $subject);
$this->assertFalse($observers->contains($this->observer));
}
/**

View File

@ -20,9 +20,14 @@ class User implements \SplSubject
/**
* observers
*
* @var array
* @var \SplObjectStorage
*/
protected $observers = array();
protected $observers;
function __construct()
{
$this->observers = new \SplObjectStorage();
}
/**
* attach a new observer
@ -33,7 +38,7 @@ class User implements \SplSubject
*/
public function attach(\SplObserver $observer)
{
$this->observers[] = $observer;
$this->observers->attach($observer);
}
/**
@ -45,11 +50,7 @@ class User implements \SplSubject
*/
public function detach(\SplObserver $observer)
{
$index = array_search($observer, $this->observers);
if (false !== $index) {
unset($this->observers[$index]);
}
$this->observers->detach($observer);
}
/**