You are here

class Factory in Zircon Profile 8

Same name in this branch
  1. 8 vendor/sebastian/comparator/src/Factory.php \SebastianBergmann\Comparator\Factory
  2. 8 vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php \Prophecy\Comparator\Factory
Same name and namespace in other branches
  1. 8.0 vendor/sebastian/comparator/src/Factory.php \SebastianBergmann\Comparator\Factory

Factory for comparators which compare values for equality.

Hierarchy

  • class \SebastianBergmann\Comparator\Factory

Expanded class hierarchy of Factory

1 file declares its use of Factory
Factory.php in vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php

File

vendor/sebastian/comparator/src/Factory.php, line 16

Namespace

SebastianBergmann\Comparator
View source
class Factory {

  /**
   * @var Comparator[]
   */
  private $comparators = array();

  /**
   * @var Factory
   */
  private static $instance;

  /**
   * Constructs a new factory.
   */
  public function __construct() {
    $this
      ->register(new TypeComparator());
    $this
      ->register(new ScalarComparator());
    $this
      ->register(new NumericComparator());
    $this
      ->register(new DoubleComparator());
    $this
      ->register(new ArrayComparator());
    $this
      ->register(new ResourceComparator());
    $this
      ->register(new ObjectComparator());
    $this
      ->register(new ExceptionComparator());
    $this
      ->register(new SplObjectStorageComparator());
    $this
      ->register(new DOMNodeComparator());
    $this
      ->register(new MockObjectComparator());
    $this
      ->register(new DateTimeComparator());
  }

  /**
   * @return Factory
   */
  public static function getInstance() {
    if (self::$instance === null) {
      self::$instance = new self();
    }
    return self::$instance;
  }

  /**
   * Returns the correct comparator for comparing two values.
   *
   * @param  mixed      $expected The first value to compare
   * @param  mixed      $actual   The second value to compare
   * @return Comparator
   */
  public function getComparatorFor($expected, $actual) {
    foreach ($this->comparators as $comparator) {
      if ($comparator
        ->accepts($expected, $actual)) {
        return $comparator;
      }
    }
  }

  /**
   * Registers a new comparator.
   *
   * This comparator will be returned by getInstance() if its accept() method
   * returns TRUE for the compared values. It has higher priority than the
   * existing comparators, meaning that its accept() method will be tested
   * before those of the other comparators.
   *
   * @param Comparator $comparator The registered comparator
   */
  public function register(Comparator $comparator) {
    array_unshift($this->comparators, $comparator);
    $comparator
      ->setFactory($this);
  }

  /**
   * Unregisters a comparator.
   *
   * This comparator will no longer be returned by getInstance().
   *
   * @param Comparator $comparator The unregistered comparator
   */
  public function unregister(Comparator $comparator) {
    foreach ($this->comparators as $key => $_comparator) {
      if ($comparator === $_comparator) {
        unset($this->comparators[$key]);
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Factory::$comparators private property
Factory::$instance private static property 1
Factory::getComparatorFor public function Returns the correct comparator for comparing two values.
Factory::getInstance public static function 1
Factory::register public function Registers a new comparator.
Factory::unregister public function Unregisters a comparator.
Factory::__construct public function Constructs a new factory. 1