Bonsoir à tous.

Sur un hébérgement mutualisé chez OVH, je viens de passer de PHP 5.6 à PHP 7. Et j'ai eu le droit au syndrome de la page blanche...
Je viens de perdre presque 1H pour trouver d'où ça venais.

Voici ce qui m'est arrivé :

<?php
// Avec PHP 5.6 ça marche, Mais pas PHP 7 !!!
$class = new $v[0]();
$class->$v[1]();

// Pour PHP 7 il faut faire :
$class = new $v[0]();
$method = $v[1];
$class->$method();

Pour débeuguer, j'ai du faire :

<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

Et comme erreur ça me mettez "Notice: Array to string conversion in ..."
Est ce que vous savez pourquoi ?
Je trouve ça bizard qu'en PHP 5.6 ça marchais nickel, et plu avec PHP7.

Quelqu'un autre a eu un problème dans le meme style ?
Y a t-il d'autres pièges ?

Merci

8 réponses


Salut,

Je n'ai pas encore pu tester PHP7, je ne pourrai donc pas te répondre sur le sujet. Mais rien ne t'empêche de regarder la liste des changements sur la doc de PHP ou voir la vidéo de grafikart.

Toutefois, et ce n'est que mon avis, il semblerait que ton code n'était pas propre à la base. Il aurait peut-être fallu utiliser les fonctions offertes par PHP pour appeler ta méthode.

$class = new $v[0]();
call_user_func( array( $class, $v[1] ) );

Merci pour l'info en tout cas.

Salut,

Quand on update son code, il faut au moins survoler les BC. Liste ici, avec ancre qui pointe vers celui concerné.

Mouais, je suis pas trop d'accord Valérian. Perso, mon approche serait plutôt du genre :

list($class, $method) = $v;
$class = new $class;
$class->$method();

Après, il n'y a pas de solution parfaite, c'est juste question de préférence.

Pour débeuguer, j'ai du faire

C'est le code standard pour debugger. Dès que tu as un problème, il faut afficher les erreurs, sinon c'est dur de trouver le problème.

Bonjour,

Le problème vient en fait de la façon dont PHP 7 gère la priorité de certains opérateurs.
Voir : http://php.net/manual/fr/migration70.incompatible.php#migration70.incompatible.variable-handling

stephweb
Auteur

Meci à tous pour vos réponses.
En fait le "problme", c'est qu'avec wamp je suis en PHP5.5. Ils n'ont visiblement pas encore PHP7 http://www.wampserver.com/ ...
Donc vivement qu'ils nous mettent php 7.
Merci

Si tu te sens, tu peux essayer, Docker, ou, plus facile d'accès, vagrant+PuPHPet.

stephweb
Auteur

Ok merci.
Du coup j'ai attéri sur ce sujet : http://www.grafikart.fr/forum/topics/20194
Et j'ai donc installer le nouveau Wamp server 3.

tu peux aussi ajouter php 7 a wamp sans trop de soucis.

stephweb
Auteur

Re bonjour,
PHP 7 a peine sortie, que PHP.net nous demande déjà de passer à PHP 7.0.1 (corrections de beugs) : https://secure.php.net/archive/2015.php#id2015-12-17-1
Mais certains hebergeurs mutualisés (OVH par exemple) ne propose pas encore PHP 7.0.1, donc va falloir patienter un peu.