Как исправить это незаконное смещение строк?
Я получаю эту ошибку "Предупреждение: недопустимое смещение строки" в /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 */
Ответы
Ответ 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, и ошибка исчезнет.