Question Comment corriger ce décalage de chaîne illégal?


Je reçois cette erreur "Avertissement: Décalage de chaîne illégal 'type' dans /home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php sur la ligne 32"

et j'ai réalisé que cette section de code dans le fichier est incorrecte, mais je ne suis pas encore très bon en PHP et je me demande si quelqu'un peut m'aider à réécrire cette section pour éliminer l'erreur. Merci! (l'erreur commence à la ligne 32 qui est le début de l'instruction if ci-dessous)

Voici le code:

/* new version */
    function get_attachment_struct( $inputs ){
        $attach = array();

    if( $inputs['type'] == 'attach' ){ 
            $name = $inputs['name'];
            $attach = array(
                0 => array(
                    'name' => $name,
                    'type' => 'text',
                    'label' =>  'Attachment URL',
                    'lvisible' => false,
                    'upload' => true,
                ),
                1 => array(
                    'name' => $name .'_id',
                    'type' => 'hidden',
                    'upload' => true
                ),
            );

            if( isset( $inputs[ 'classes' ] ) ){
                $attach[0]['classes'] = $inputs[ 'classes' ];
                $attach[1]['classes'] = $inputs[ 'classes' ] . '_id';
            }
        }
        return $attach;
    }

    /* new version */

21
2018-03-12 12:36


origine


Réponses:


if ($inputs['type'] == 'attach') {

Le code est valide, mais il attend le paramètre de fonction $inputs être un tableau. L'avertissement "Décalage de chaîne illégal" lors de l'utilisation $inputs['type'] signifie que la fonction est passée une chaîne au lieu d'un tableau. (Et puis, puisqu'un offset de chaîne est un nombre, 'type' ne convient pas.)

Donc, en théorie, le problème se situe ailleurs, l'appelant du code ne fournissant pas un paramètre correct.

Cependant, ce message d'avertissement est nouveau pour PHP 5.4. Les anciennes versions ne prévenaient pas si cela se produisait. Ils se convertiraient silencieusement 'type' à 0, puis essayez d’obtenir le caractère 0 (le premier caractère) de la chaîne. Donc, si ce code était censé fonctionner, cela est dû au fait que l'abus d'une chaîne comme celle-ci n'a pas provoqué de plaintes sur PHP 5.3 et les versions ultérieures. (Beaucoup de vieux code PHP ont rencontré ce problème après la mise à niveau.)

Vous pourriez vouloir déboguer Pourquoi la fonction est donnée une chaîne en examinant le code appelant et découvrez quelle valeur il a en faisant un var_dump($inputs); dans la fonction. Mais si vous voulez simplement arrêter l'avertissement pour le faire se comporter comme PHP 5.3, changez la ligne à:

if (is_array($inputs) && $inputs['type'] == 'attach') {

40
2018-03-12 13:26



if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox") )
{
    if(!isset($data[$field]))
        $data[$field]="";
}

0
2018-06-11 00:57



J'obtiens la même erreur dans WP quand j'utilise php ver 7.1.6 - ramène ta version php à la version 7.0.20 et l'erreur disparaîtra.


-1
2018-06-30 20:54