initial commit
This commit is contained in:
commit
5210d78d7d
969 changed files with 223828 additions and 0 deletions
73
kirby/src/Reflection/Constructor.php
Normal file
73
kirby/src/Reflection/Constructor.php
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<?php
|
||||
|
||||
namespace Kirby\Reflection;
|
||||
|
||||
use ReflectionMethod;
|
||||
use ReflectionParameter;
|
||||
|
||||
/**
|
||||
* Specialized Reflection Method class to
|
||||
* inspect a class constructor
|
||||
*
|
||||
* @package Kirby Reflection
|
||||
* @author Bastian Allgeier <bastian@getkirby.com>
|
||||
* @link https://getkirby.com
|
||||
* @copyright Bastian Allgeier
|
||||
* @license https://opensource.org/licenses/MIT
|
||||
* @since 5.2.0
|
||||
*/
|
||||
class Constructor extends ReflectionMethod
|
||||
{
|
||||
public function __construct(object|string $objectOrClass)
|
||||
{
|
||||
parent::__construct($objectOrClass, '__construct');
|
||||
}
|
||||
|
||||
/**
|
||||
* Group arguments into 'accepted' and 'ignored' arrays
|
||||
*/
|
||||
public function classifyArguments(array $arguments): array
|
||||
{
|
||||
$parameterNames = $this->getParameterNames();
|
||||
|
||||
$accepted = [];
|
||||
$ignored = [];
|
||||
|
||||
foreach ($arguments as $argumentName => $argumentValue) {
|
||||
if (in_array($argumentName, $parameterNames, true) === true) {
|
||||
$accepted[$argumentName] = $argumentValue;
|
||||
} else {
|
||||
$ignored[$argumentName] = $argumentValue;
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'accepted' => $accepted,
|
||||
'ignored' => $ignored
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all arguments that are defined as constructor parameters
|
||||
*/
|
||||
public function getAcceptedArguments(array $arguments): array
|
||||
{
|
||||
return $this->classifyArguments($arguments)['accepted'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all arguments that are not defined as constructor parameters
|
||||
*/
|
||||
public function getIgnoredArguments(array $arguments): array
|
||||
{
|
||||
return $this->classifyArguments($arguments)['ignored'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of all parameter names
|
||||
*/
|
||||
public function getParameterNames(): array
|
||||
{
|
||||
return array_values(array_map(fn (ReflectionParameter $param) => $param->name, $this->getParameters()));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue