Fix ReflectionParameter::isArray() was deprecated as of PHP 8.0.0

This commit is contained in:
nathan 2021-10-13 10:52:56 -06:00
parent 7502749ef1
commit 9de404da9c

View File

@ -553,12 +553,21 @@ class Widget
$method = new ReflectionMethod($this, $method_name); $method = new ReflectionMethod($this, $method_name);
foreach($method->getParameters() as $index => $param) foreach($method->getParameters() as $index => $param)
{ {
if(!$param->isOptional() && !array_key_exists($index,$params)) if(!$param->isOptional() && !array_key_exists($index, $params))
{ {
error_log("Missing required parameter {$param->getPosition()}: {$param->getName()}"); error_log("Missing required parameter {$param->getPosition()}: {$param->getName()}");
$call = false; $call = false;
} }
if($param->isArray() && !is_array($params[$index])) // Check to see if method wants an array, and we're providing it
$paramType = $param->getType();
if(!$paramType)
{
continue;
}
$types = $paramType instanceof \ReflectionUnionType
? $paramType->getTypes()
: [$paramType];
if(in_array('array', array_map(fn(\ReflectionNamedType $t) => $t->getName(), $types)) && !is_array($params[$index]))
{ {
error_log("$method_name expects an array for {$param->getPosition()}: {$param->getName()}"); error_log("$method_name expects an array for {$param->getPosition()}: {$param->getName()}");
$params[$index] = (array)$params[$index]; $params[$index] = (array)$params[$index];