Это происходит просто, если вы пытаетесь рассматривать массив как строку:
$arr = array('foo', 'bar');
echo $arr; // Notice: Array to string conversion
$str = 'Something, ' . $arr; // Notice: Array to string conversion
Массив не может быть просто echo
'd или конкатенируется с строкой, потому что результат не определен. PHP будет использовать строку «Array» вместо массива и вызвать уведомление, чтобы указать, что это, вероятно, не то, что было предназначено, и что вы должны проверять свой код здесь. Вероятно, вы захотите что-то вроде этого:
echo $arr[0]; // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar
Или зациклируйте массив:
foreach($arr as $key => $value) {
echo "array $key = $value";
// displays first: array 0 = foo
// displays next: array 1 = bar
}
Если это уведомление появляется где-то, чего вы не ожидаете, это означает переменную, которую вы мысль - это строка, на самом деле это массив. Это означает, что у вас есть ошибка в коде, которая делает эту переменную массивом вместо ожидаемой строки.
Макро-имена должны только состоять из алфавитно-цифровых символов и подчеркиваний, т.е. 'a-z'
, 'A-Z'
, '0-9'
, и '_'
, и первый символ не должен быть цифрой. Некоторые препроцессоры также разрешают символ знака доллара ', но Вы не должны использовать его; к сожалению, я не могу заключить стандарт C в кавычки, так как у меня нет копии его.
От документация GCC :
не буква в строго соответствующем режиме, или если Вы определяетемаркеры Предварительной обработки попадают в пять широких классов: идентификаторы, предварительно обрабатывая числа, строковые литералы, punctuators, и другой. идентификатор совпадает с идентификатором в C: любая последовательность букв, цифр или подчеркиваний, который начинается с буквы или подчеркивания. Ключевые слова C не имеют никакого значения для препроцессора; они - обычные идентификаторы. Можно определить макрос, имя которого является ключевым словом, например. Единственный идентификатор, который можно считать ключевым словом предварительной обработки,
defined
. Посмотрите Определенный.Это главным образом верно для других языков, которые используют препроцессор C. Однако несколько ключевых слов C++ являются значительными даже в препроцессоре. Посмотрите C++ Под названием Операторы.
В 1999 C стандарт, идентификаторы могут содержать буквы, которые не являются частью “basic исходного символа set”, по усмотрению реализации (такому как акцентируемые латинские буквы, греческие буквы или китайские идеограммы). Это может быть сделано с расширенным набором символов, или
'\u'
и'\U'
escape-последовательности. Реализация этой функции в GCC экспериментальна; такие символы только приняты в'\u'
и'\U'
формы и только если-fextended-identifiers
используется.Как расширение, обработки GCC
' как буква. Это для совместимости с некоторыми системами, такими как VMS, где
' является наиболее часто используемым на определенные системой имена функций и имена объектов.
' не буква в строго соответствующем режиме, или если Вы определяете
-$
опция. Посмотрите Вызов.
-$
опция. Посмотрите Вызов. является наиболее часто используемым на определенные системой имена функций и имена объектов. ' не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов. как буква. Это для совместимости с некоторыми системами, такими как VMS, где ' является наиболее часто используемым на определенные системой имена функций и имена объектов. ' не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
является наиболее часто используемым на определенные системой имена функций и имена объектов. ' не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов. , но Вы не должны использовать его; к сожалению, я не могу заключить стандарт C в кавычки, так как у меня нет копии его. От документация GCC :
не буква в строго соответствующем режиме, или если Вы определяетемаркеры Предварительной обработки попадают в пять широких классов: идентификаторы, предварительно обрабатывая числа, строковые литералы, punctuators, и другой. идентификатор совпадает с идентификатором в C: любая последовательность букв, цифр или подчеркиваний, который начинается с буквы или подчеркивания. Ключевые слова C не имеют никакого значения для препроцессора; они - обычные идентификаторы. Можно определить макрос, имя которого является ключевым словом, например. Единственный идентификатор, который можно считать ключевым словом предварительной обработки,
defined
. Посмотрите Определенный.Это главным образом верно для других языков, которые используют препроцессор C. Однако несколько ключевых слов C++ являются значительными даже в препроцессоре. Посмотрите C++ Под названием Операторы.
В 1999 C стандарт, идентификаторы могут содержать буквы, которые не являются частью “basic исходного символа set”, по усмотрению реализации (такому как акцентируемые латинские буквы, греческие буквы или китайские идеограммы). Это может быть сделано с расширенным набором символов, или
'\u'
и'\U'
escape-последовательности. Реализация этой функции в GCC экспериментальна; такие символы только приняты в'\u'
и'\U'
формы и только если-fextended-identifiers
используется.Как расширение, обработки GCC
' как буква. Это для совместимости с некоторыми системами, такими как VMS, где
' является наиболее часто используемым на определенные системой имена функций и имена объектов.
' не буква в строго соответствующем режиме, или если Вы определяете
-$
опция. Посмотрите Вызов.
-$
опция. Посмотрите Вызов. является наиболее часто используемым на определенные системой имена функций и имена объектов. ' не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов. как буква. Это для совместимости с некоторыми системами, такими как VMS, где ' является наиболее часто используемым на определенные системой имена функций и имена объектов. ' не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
является наиболее часто используемым на определенные системой имена функций и имена объектов. ' не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов.
не буква в строго соответствующем режиме, или если Вы определяете -$
опция. Посмотрите Вызов. Вы правы, те же правила относятся к макросу и идентификаторам, насколько имена затронуты: допустимые символы [A-Za-z0-9 _].
Это - общее использование для использования ИСПОЛЬЗОВАННЫХ ДЛЯ СВОЕЙ ВЫГОДЫ имен для дифференциации макросов от других идентификаторов - переменные и имя функции.
Те же правила, которые определяют допустимые идентификаторы для имен переменной, относятся к макро-именам за исключением того, что макросы могут иметь те же имена как ключевые слова. Допустимые символы на имена идентификатора включают digits
и non-digits
и не должны запускаться с цифры. non-digits
включают прописные буквы A-Z, строчные буквы a-z, подчеркивание, и любая реализация определила символы.