From 032cc57cf6d0c6332701f9e1afec63ecab393b4f Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Thu, 12 Sep 2013 11:20:10 +0200 Subject: [PATCH] cs Visitor --- Tests/Visitor/VisitorTest.php | 2 +- Visitor/Group.php | 4 +-- Visitor/Role.php | 26 +++++++++---------- Visitor/RolePrintVisitor.php | 8 +++--- ...leVisitor.php => RoleVisitorInterface.php} | 5 ++-- Visitor/User.php | 3 --- 6 files changed, 20 insertions(+), 28 deletions(-) rename Visitor/{RoleVisitor.php => RoleVisitorInterface.php} (91%) diff --git a/Tests/Visitor/VisitorTest.php b/Tests/Visitor/VisitorTest.php index dfca346..a287ab0 100644 --- a/Tests/Visitor/VisitorTest.php +++ b/Tests/Visitor/VisitorTest.php @@ -39,7 +39,7 @@ class VisitorTest extends \PHPUnit_Framework_TestCase } /** - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException * @expectedExceptionMessage Mock */ public function testUnknownObject() diff --git a/Visitor/Group.php b/Visitor/Group.php index 972e95c..5d47d6a 100644 --- a/Visitor/Group.php +++ b/Visitor/Group.php @@ -3,11 +3,10 @@ namespace DesignPatterns\Visitor; /** - * An example of a Visitee : Group + * An example of a Visitor: Group */ class Group extends Role { - /** * @var string */ @@ -28,5 +27,4 @@ class Group extends Role { return "Group: " . $this->name; } - } diff --git a/Visitor/Role.php b/Visitor/Role.php index 6d72cc5..6f5a0c4 100644 --- a/Visitor/Role.php +++ b/Visitor/Role.php @@ -7,34 +7,34 @@ namespace DesignPatterns\Visitor; * * Purpose: * The Visitor Pattern lets you outsource operations on objects to other objects. The main reason to do this is to keep - * a seperation of concerns. But classes have to define an contract to allow visitors (the "accept" method in the example below). + * a separation of concerns. But classes have to define an contract to allow visitors (the "accept" method in the example below). * * The contract is an abstract class but you can have also a clean interface. - * In that case, each Visitee has to choose itself which method to invoke on the visitor. + * In that case, each Visitor has to choose itself which method to invoke on the visitor. */ abstract class Role { - /** - * This method handles a double dispatch based on the shortname of the Visitee - * + * This method handles a double dispatch based on the short name of the Visitor + * * Feel free to override it if your object must call another visiting behavior - * - * @param \DesignPatterns\Visitor\RoleVisitor $visitor + * + * @param \DesignPatterns\Visitor\RoleVisitorInterface $visitor + * + * @throws \InvalidArgumentException */ - public function accept(RoleVisitor $visitor) + public function accept(RoleVisitorInterface $visitor) { // this trick to simulate double-dispatch based on type-hinting - $fqcn = get_called_class(); - preg_match('#([^\\\\]+)$#', $fqcn, $extract); + $klass = get_called_class(); + preg_match('#([^\\\\]+)$#', $klass, $extract); $visitingMethod = 'visit' . $extract[1]; // this ensures strong typing with visitor interface, not some visitor objects - if (!method_exists(__NAMESPACE__ . '\RoleVisitor', $visitingMethod)) { - throw new \InvalidArgumentException("The visitor you provide cannot visit a $fqcn instance"); + if (!method_exists(__NAMESPACE__ . '\RoleVisitorInterface', $visitingMethod)) { + throw new \InvalidArgumentException("The visitor you provide cannot visit a $klass instance"); } call_user_func(array($visitor, $visitingMethod), $this); } - } diff --git a/Visitor/RolePrintVisitor.php b/Visitor/RolePrintVisitor.php index 24a8b1e..40d447f 100644 --- a/Visitor/RolePrintVisitor.php +++ b/Visitor/RolePrintVisitor.php @@ -7,11 +7,10 @@ namespace DesignPatterns\Visitor; * * An implementation of a concrete Visitor */ -class RolePrintVisitor implements RoleVisitor +class RolePrintVisitor implements RoleVisitorInterface { - /** - * @inheritdoc + * {@inheritdoc} */ public function visitGroup(Group $role) { @@ -19,11 +18,10 @@ class RolePrintVisitor implements RoleVisitor } /** - * @inheritdoc + * {@inheritdoc} */ public function visitUser(User $role) { echo "Role: " . $role->getName(); } - } diff --git a/Visitor/RoleVisitor.php b/Visitor/RoleVisitorInterface.php similarity index 91% rename from Visitor/RoleVisitor.php rename to Visitor/RoleVisitorInterface.php index 634024d..8c1852a 100644 --- a/Visitor/RoleVisitor.php +++ b/Visitor/RoleVisitorInterface.php @@ -13,9 +13,8 @@ namespace DesignPatterns\Visitor; * Note 2 : the visitor must not choose itself which method to * invoke, it is the Visitee that make this decision. */ -interface RoleVisitor +interface RoleVisitorInterface { - /** * Visit a User object * @@ -24,7 +23,7 @@ interface RoleVisitor public function visitUser(User $role); /** - * Visit a Group objet + * Visit a Group object * * @param \DesignPatterns\Visitor\Group $role */ diff --git a/Visitor/User.php b/Visitor/User.php index 3555933..f9291fa 100644 --- a/Visitor/User.php +++ b/Visitor/User.php @@ -9,7 +9,6 @@ namespace DesignPatterns\Visitor; */ class User extends Role { - /** * @var string */ @@ -30,6 +29,4 @@ class User extends Role { return "User " . $this->name; } - } -