| 
<?php
 /*
 Copyright (c) 2009 hamcrest.org
 */
 
 class FactoryClass
 {
 /**
 * @var string
 */
 private $file;
 
 /**
 * @var ReflectionClass
 */
 private $reflector;
 
 /**
 * @var array
 */
 private $methods;
 
 public function __construct($file, ReflectionClass $class)
 {
 $this->file = $file;
 $this->reflector = $class;
 $this->extractFactoryMethods();
 }
 
 public function extractFactoryMethods()
 {
 $this->methods = array();
 foreach ($this->getPublicStaticMethods() as $method) {
 if ($method->isFactory()) {
 //                echo $this->getName() . '::' . $method->getName() . ' : ' . count($method->getCalls()) . PHP_EOL;
 $this->methods[] = $method;
 }
 }
 }
 
 public function getPublicStaticMethods()
 {
 $methods = array();
 foreach ($this->reflector->getMethods(ReflectionMethod::IS_STATIC) as $method) {
 if ($method->isPublic() && $method->getDeclaringClass() == $this->reflector) {
 $methods[] = new FactoryMethod($this, $method);
 }
 }
 return $methods;
 }
 
 public function getFile()
 {
 return $this->file;
 }
 
 public function getName()
 {
 return $this->reflector->name;
 }
 
 public function isFactory()
 {
 return !empty($this->methods);
 }
 
 public function getMethods()
 {
 return $this->methods;
 }
 }
 
 |