[PHP 7 et 8] Problème avec is_callable
Bonjour,
Je viens de changer d'ordi ; le nouveau est en PHP 8.0.2 alors que l'ancien est en PHP 7.3.26.
La même application sur les deux ordis. L'appel des classes passe par une fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| private function callAction(Request $request)
{
$target = $request->getRoute()->getCallable();
/*echo '<br /> $request :<pre>';
var_dump($request);
echo "</pre>";
echo '<br />request getRoute : ';
var_dump($request->getRoute());
echo '<br />target : ';
var_dump($target);
echo '<br />target callable ? ';
var_dump(is_callable($target));
exit;
*/
if (is_callable($target)) {
return call_user_func([new $target[0]($request), $target[1]]);
}
$class = new $target;
return $class($request);
} |
Les premières classes sont appelées correctement puis, sur une action de création d'une candidature, ça plante sur le nouvel ordi alors que ça passe sur l'ancien.
Nouvel ordi en PHP8 :
Citation:
target :
/home/philippe/Nextcloud/pef_public/src/Framework/App.php:199:
array (size=2)
0 => string 'App\Candidature\Actions\CandidaturesAction' (length=42)
1 => string 'creerCandidature' (length=16)
target callable ?
/home/philippe/Nextcloud/pef_public/src/Framework/App.php:201:boolean false
=> On passe donc à l'instruction $class = new $target; et ça plante puisque $target est un tableau.
Ancien ordi en PHP7 :
Citation:
target :
/home/philippe/Nextcloud/pef_public/src/Framework/App.php:199:
array (size=2)
0 => string 'App\Candidature\Actions\CandidaturesAction' (length=42)
1 => string 'creerCandidature' (length=16)
target callable ?
/home/philippe/Nextcloud/pef_public/src/Framework/App.php:201:boolean true
=> Là on passe bien dans le if et la méthode de la classe est appelée.
Si j'ajoute true à is_callable, if (is_callable($target, true)) { alors ça passe dans le if et la méthode est lancée... mais ça me fait planter d'autres trucs ! :calim2:
Autre bizarrerie : le même système avec une autre application similaire (en fait il y a une partie d'application publique et une privée) ne pose pas de problème sur le nouvel ordi ! 8O
Je ne suis pas l'auteur du framework utilisé dans lequel se trouve la méthode callAction.
Une idée à me soumettre ?