Не могу найти ошибку в этом фрагменте кода Php

Я получаю ошибку T_String в этом коде, более точно она говорит во 2-й строке ($ form ['com...), и я просто не понимаю, почему.

function _maxlength_comment_type_form_alter(&$form, $form_state, $form_id) {
    $form['comment']['comment_max_length'] = array(
     '#type' => 'select',
     '#title' => t('Maximum comment length'),
     '#default_value' => variable_get('comment_max_length_'. $form['#node_type'] -> type, 160),
     '#options'=> drupal_map_assoc(array(140,160,180,200)),
     '#description' => t('numero maximo de caracteres permitidos.'),
     '#weight' => -1,
     );

Я добавляю этот код в модуль Maxlength drupal.


person Fabio    schedule 08.05.2009    source источник
comment
То, что вы написали, является синтаксически правильным PHP-кодом. У меня это работает без синтаксической ошибки как в PHP4, так и в PHP5, если я оберну его ‹?php и }   -  person pts    schedule 09.05.2009


Ответы (3)


Это может быть эта часть:

'comment_max_length_'. $form['#node_type'] -> type

Попробуйте избавиться от пробелов вокруг стрелки?


Изменить. Я не считаю, что вышеизложенное на самом деле является проблемой с кодом, хотя я все же рекомендую удалить пробелы из соображений стиля, просто чтобы было очевидно, что вы делаете это:

'comment_max_length_'. ($form['#node_type']->type)

а не это:

('comment_max_length_' . $form['#node_type'])

Ваш код действителен и работает на моем ПКTM.


Другое редактирование:

Убедитесь, что $form['comment'] также определено. Возможно, добавьте это в начале функции.

if (!isset($form['comment'])) $form['comment'] = array();
person nickf    schedule 08.05.2009
comment
Спасибо за подсказки по синтаксису, ребята, я все еще изучаю php (новичок), поэтому, вероятно, делаю много ошибок такого типа. Кстати, я нашел проблему, она была в функции сразу после той, которую я опубликовал. Мне все еще нужно лучше читать ошибки синтаксического анализа. Пишут одну строку, а ошибка на самом деле в другой? - person Fabio; 09.05.2009
comment
да, часто проблема будет в строке до или после строки, о которой он говорит. - person nickf; 09.05.2009

Две проблемы, которые я вижу, один nickf упоминается выше, то есть у вас не должно быть пробела по обе стороны от стрелки:

'comment_max_length_'. $form['#node_type'] -> type

Кроме того, после него не должно быть запятой (поскольку это последний элемент в массиве):

'#weight' => -1,`
person James B    schedule 08.05.2009
comment
На самом деле это не синтаксическая ошибка. Это плохой стиль, IMO, но это все еще действующий PHP. - person nickf; 09.05.2009
comment
Лишняя запятая не имеет значения. Я обычно добавляю эту дополнительную запятую в свой код. Таким образом, когда я позже добавлю новые записи в массив, я не забуду добавить дополнительную запятую. Кроме того, мои различия будут меньше. - person Sander Marechal; 09.05.2009
comment
Обычно это не проблема, но IIRC (не стесняйтесь поправить меня, если я ошибаюсь), некоторые старые реализации PHP делают ошибку в дополнительной запятой. Хотя, может быть, я просто мечтаю :) - person James B; 09.05.2009

Как насчет того, чтобы разбить это огромное утверждение на более мелкие, чтобы вы могли лучше определить проблему?

person Michael Borgwardt    schedule 08.05.2009
comment
Это очень помогло, я вытащил функцию за функцией, чтобы я мог найти, где была ошибка. - person Fabio; 09.05.2009