[], 'public' => false, 'protected' => false, 'private' => false, ]; foreach ($defaults as $key => $defaultValue) { if (!isset($definition[$key])) { $definition[$key] = $defaultValue; } } $this->definition = $definition; foreach ($this->definition['params'] as $parameterName => $parameterDefinition) { $this->parameters[$parameterName] = new MethodParameter($parameterName, $parameterDefinition); } } public function getName(): string { return $this->name; } /** * @return array|MethodParameter[] */ public function getParameters(): array { return $this->parameters; } /** * @throws NoSuchMethodParameterException */ public function getParameter(string $parameterName): MethodParameter { if (!isset($this->parameters[$parameterName])) { throw NoSuchMethodParameterException::createForParameterName( $this->className, $this->name, $parameterName ); } return $this->parameters[$parameterName]; } public function isPublic(): bool { return $this->definition['public']; } public function isProtected(): bool { return $this->definition['protected']; } public function isPrivate(): bool { return $this->definition['private']; } }