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
2 changed files with 21 additions and 11 deletions

View File

@@ -36,11 +36,20 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
public function testAttachDetach() public function testAttachDetach()
{ {
$subject = new User(); $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); $subject->attach($this->observer);
$this->assertAttributeNotEmpty('observers', $subject); $this->assertTrue($observers->contains($this->observer));
$subject->detach($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 * observers
* *
* @var array * @var \SplObjectStorage
*/ */
protected $observers = array(); protected $observers;
function __construct()
{
$this->observers = new \SplObjectStorage();
}
/** /**
* attach a new observer * attach a new observer
@@ -33,7 +38,7 @@ class User implements \SplSubject
*/ */
public function attach(\SplObserver $observer) 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) public function detach(\SplObserver $observer)
{ {
$index = array_search($observer, $this->observers); $this->observers->detach($observer);
if (false !== $index) {
unset($this->observers[$index]);
}
} }
/** /**