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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 :
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 !

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 !

Je ne suis pas l'auteur du framework utilisé dans lequel se trouve la méthode callAction.

Une idée à me soumettre ?