71 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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()) {
 | |
|                 $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;
 | |
|     }
 | |
| }
 |