ВОПРОС
Всем привет. Мне нужна помощь в одном вопросе. Я постоянно получаю сообщение об ошибке, в котором говорится, что в файле 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 */
ОТВЕТ
Могу сказать тебе, что ты немного ошибся. У тебя все написано так, как это нужно. Проблема появляется не совсем из-за этого. Вызывающая функция просто не предоставляет нужный параметр. Код ожидает, что параметр $inputs будет передан как массив, а он передается как строка. Поэтому у тебя и выскакивает предупреждение об ошибке. Вообще, скорее всего, твой раздел был написан в более ранней версии PHP, потому что, только начиная с версии, 5.4 начали появляться эти сообщения. Прежние версии просто переписывали type на 0, и все работало как нужно. Могу тебя обрадовать – есть простые способы, который помогут разобраться с твоим вопросом.
Лично я могу предложить тебе один из двух вариантов действий. Первый – ты пытаешься самостоятельно поработать с кодом и попытаться отладить его. Попробуй немного изучить его, выяснить, как работают функции и узнать, какое значение имеет функция вызова. Для этого воспользуйся var_dump($inputs);.Второй способ работает гораздо проще. Ты просто отключишь предупреждение и вернешь тот принцип работы, который был раньше, до обновления. Чтобы сделать это, просто замени свой фрагмент на этот:
if (is_array($inputs) && $inputs[‘type’] == ‘attach’) {