You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.4 KiB
71 lines
1.4 KiB
<?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; |
|
} |
|
}
|
|
|