Я получаю эту ошибку «Предупреждение: недопустимое смещение строки» в /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 */
if ($inputs['type'] == 'attach') {
Код действителен, но он ожидает, что параметр параметра $inputs
будет массивом. Предупреждение «Недопустимое смещение строки» при использовании $inputs['type']
означает, что функции передается строка вместо массива. (И тогда, поскольку строковое смещение является числом, 'type'
не подходит.)
Поэтому теоретически проблема кроется в другом месте, причем вызывающий код не предоставляет правильный параметр.
Однако это предупреждение является новым для PHP 5.4. Старые версии не предупреждали, если это произошло. Они молча преобразуют 'type'
в 0
, затем попытаются получить символ 0 (первый символ) строки. Поэтому, если этот код должен был работать, это потому, что злоупотребление такой строкой не вызывало никаких жалоб на PHP 5.3 и ниже. (Много старых PHP-кода столкнулись с этой проблемой после обновления.)
Возможно, вам захочется отладить, почему функция получает строку, проверяя код вызова и var_dump($inputs);
, какое значение она имеет, делая var_dump($inputs);
в функции. Но если вы просто хотите закрыть предупреждение, чтобы заставить его вести себя как PHP 5.3, измените строку на:
if (is_array($inputs) && $inputs['type'] == 'attach') {
if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox") ) { if(!isset($data[$field])) $data[$field]=""; }
Я получаю ту же ошибку в WP, когда я использую php ver 7.1.6 – просто верните версию php на 7.0.20, и ошибка исчезнет.