Подтвердить что ты не робот

Как исправить это незаконное смещение строк?

Я получаю эту ошибку "Предупреждение: недопустимое смещение строки" в /home/mysite/public _html/wp-content/themes/evento/lib/php/extra.class.php в строке 32 "

и я понял, что этот раздел кода в файле неверен, однако я еще не настолько хорош в PHP, но мне интересно, может ли кто-нибудь помочь мне переписать этот раздел, чтобы устранить ошибку. Благодарю! (ошибка начинается в строке 32, которая является началом инструкции if ниже)

Вот код:

/* 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 */
4b9b3361

Ответ 1

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

Код действителен, но он ожидает, что параметр функции $inputs будет массивом. Предупреждение "Недопустимое смещение строки" при использовании $inputs['type'] означает, что функции передается строка вместо массива. (И тогда, поскольку смещение строки является числом, 'type' не подходит.)

Таким образом, теоретически проблема лежит в другом месте, причем вызывающий код не предоставляет правильный параметр.

Однако это предупреждение является новым для PHP 5.4. Старые версии не предупреждали, если это произошло. Они молча преобразуют 'type' в 0, а затем попытаются получить символ 0 (первый символ) строки. Поэтому, если этот код должен был работать, потому что злоупотребление такой строкой не вызывало никаких жалоб на PHP 5.3 и ниже. (Много старого кода PHP столкнулись с этой проблемой после обновления.)

Возможно, вам захочется отладить, почему функции присваивается строка, проверяя код вызова и выясняя, какое значение она имеет, выполнив var_dump($inputs); в функции. Но если вы просто хотите закрыть предупреждение, чтобы заставить его вести себя как PHP 5.3, измените строку на:

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

Ответ 2

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

Ответ 3

Я получаю ту же ошибку в WP, когда я использую php ver 7.1.6 - просто верните вашу версию php на 7.0.20, и ошибка исчезнет.