web-dev-qa-db-fra.com

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

Je reçois le message d'erreur "Avertissement: Le type de chaîne" n'est pas autorisé dans /home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php à la ligne 32 "

et j'ai réalisé que cette section de code dans le fichier est fausse, cependant je ne suis pas si génial en PHP pour le moment et je me demande si quelqu'un peut m'aider à réécrire cette section pour éliminer l'erreur Merci (le message d'erreur commence à la ligne 32, qui correspond au 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 */
25
gabearnold
if ($inputs['type'] == 'attach') {

Le code est valide, mais il s'attend à ce que le paramètre de fonction $inputs Soit un tableau. L'avertissement "Illegal string offset" lors de l'utilisation de $inputs['type'] Signifie que la fonction est en train de transmettre une chaîne au lieu d'un tableau. (Et puis, comme le décalage de chaîne est un nombre, 'type' Ne convient pas.)

Donc, en théorie, le problème est 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 convertiraient silencieusement 'type' En 0, Puis essayeraient d'obtenir le caractère 0 (le premier caractère) de la chaîne. Donc, si ce code était censé fonctionner, c'est parce qu'abuser d'une chaîne de caractères telle que celle-ci ne provoquait aucune plainte sur les versions PHP 5.3 et ultérieures. (De nombreux anciens codes PHP ont rencontré ce problème après la mise à niveau.)

Vous voudrez peut-être déboguer pourquoi une chaîne est attribuée à la fonction en examinant le code appelant, et trouver sa valeur en effectuant un var_dump($inputs); dans la fonction. Mais si vous voulez juste fermer l'avertissement pour qu'il se comporte comme PHP 5.3, modifiez la ligne en:

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