15 private $namespaceResolver;
20 private $scalarTypesProvider;
52 ) || !$inherited &&
$class->getConstructor()->class !=
$class->getName()
57 $constructor = new \Zend\Code\Reflection\MethodReflection(
$class->getName(),
'__construct');
58 foreach ($constructor->getParameters() as $parameter) {
59 $name = $parameter->getName();
60 $position = $parameter->getPosition();
63 if ($parameter->isOptional()) {
64 if ($parameter->isDefaultValueAvailable()) {
65 $value = $parameter->getDefaultValue();
66 if (
true == is_array(
$value)) {
71 $default = $parameter->getDefaultValue();
73 }
elseif ($parameter->allowsNull()) {
80 'position' => $position,
81 'type' => $this->processType(
$class, $parameter),
82 'isOptional' => $parameter->isOptional(),
83 'default' => $default,
96 private function processType(\ReflectionClass
$class, \
Zend\Code\Reflection\ParameterReflection $parameter)
98 if ($parameter->getClass()) {
102 $type = $parameter->detectType();
104 if (
$type ===
'null') {
108 if (strpos(
$type,
'[]') !==
false) {
112 if (!in_array(
$type, $this->scalarTypesProvider->getTypes())) {
113 $availableNamespaces = $this->namespaceResolver->getImportedNamespaces(file(
$class->getFileName()));
114 $availableNamespaces[0] =
$class->getNamespaceName();
115 return $this->namespaceResolver->resolveNamespace(
$type, $availableNamespaces);
131 if (!
$class->getFileName()) {
135 $trimFunction =
function (&
$value) {
146 $pattern =
'/parent::__construct\(([ ' .
148 ']*[$]{1}[a-zA-Z0-9_]*,)*[ ' .
151 '([$]{1}[a-zA-Z0-9_]*){1}[' .
169 foreach (
$arguments as $argumentPosition => $argumentName) {
170 $type = isset($classArguments[$argumentName]) ? $classArguments[$argumentName][
'type'] :
null;
172 'name' => $argumentName,
173 'position' => $argumentPosition,
190 if ($requiredType === $actualType) {
195 if ($requiredType ===
null || $actualType ===
null) {
203 if ($requiredType ===
'array' || $actualType ===
'array') {
207 if ($requiredType ===
'mixed' || $actualType ===
'mixed') {
222 if (is_array($var)) {
224 foreach ($var as $key =>
$value) {
227 $code =
'array(' . implode(
', ', $toImplode) .
')';
230 return var_export($var,
true);
242 $regexp =
'(@([a-z_][a-z0-9_]+)\(([^\)]+)\))i';
243 $docBlock =
$class->getConstructor()->getDocComment();
245 preg_match_all($regexp, $docBlock, $matches);
246 foreach (array_keys($matches[0]) as
$index) {
is_subclass_of($obj, $className)
elseif(isset( $params[ 'redirect_parent']))
getConstructorArguments(\ReflectionClass $class, $groupByPosition=false, $inherited=false)
isCompatibleType($requiredType, $actualType)
$_option $_optionId $class
getAnnotations(\ReflectionClass $class)
__construct(NamespaceResolver $namespaceResolver=null, ScalarTypesProvider $scalarTypesProvider=null)
getParentCall(\ReflectionClass $class, array $classArguments)
if(!isset($_GET['name'])) $name