diff --git a/CHANGELOG.md b/CHANGELOG.md index c039b49e..958e0777 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ v0.8.1 (201x-xx-xx) ignored when retrying to execute a Lua script by falling back to `EVAL` after a `-NOSCRIPT` error (ISSUE #94). +- __FIX__: When subclassing Predis\Client, the `getClientFor()` method returns + a new instance of the subclass instead of a new instance of Predis\Client. + v0.8.0 (2012-10-23) =============================================================================== diff --git a/lib/Predis/Client.php b/lib/Predis/Client.php index 975a7931..ae336400 100644 --- a/lib/Predis/Client.php +++ b/lib/Predis/Client.php @@ -142,7 +142,7 @@ class Client implements ClientInterface throw new \InvalidArgumentException("Invalid connection ID: '$connectionID'"); } - return new Client($connection, $this->options); + return new static($connection, $this->options); } /** diff --git a/tests/Predis/ClientTest.php b/tests/Predis/ClientTest.php index 45b98c34..b8db3848 100644 --- a/tests/Predis/ClientTest.php +++ b/tests/Predis/ClientTest.php @@ -462,10 +462,22 @@ class ClientTest extends StandardTestCase $clientNode02 = $client->getClientFor('node02'); + $this->assertInstanceOf('Predis\Client', $clientNode02); $this->assertSame($node02, $clientNode02->getConnection()); $this->assertSame($client->getOptions(), $clientNode02->getOptions()); } + /** + * @group disconnected + */ + public function testGetClientForReturnsInstanceOfSubclass() + { + $nodes = array('tcp://host1?alias=node01', 'tcp://host2?alias=node02'); + $client = $this->getMock('Predis\Client', array('dummy'), array($nodes), 'SubclassedClient'); + + $this->assertInstanceOf('SubclassedClient', $client->getClientFor('node02')); + } + /** * @group disconnected */