Эта ошибка возникает в двух вариантах:
$arr = [1, 2, 3];
Синтаксис инициализатора этого массива был введен только в PHP 5.4; это приведет к возникновению ошибки парсера в версиях до этого. Если возможно, обновите свою установку или используйте старый синтаксис:
$arr = array(1, 2, 3);
См. Также этот пример из руководства.
$suffix = explode(',', 'foo,bar')[1];
Результаты функции разыменования массива также были введены в PHP 5.4. Если обновление невозможно, вам нужно использовать временную переменную:
$parts = explode(',', 'foo,bar');
$suffix = $parts[1];
См. Также этот пример из руководства.
Проблема атрибутов по сравнению с элементами была вокруг к лучшему части десятилетия и нет никакого правильного ответа. Вместо этого рассмотрите различия и от которого необходимо быть в состоянии решить, чтобы использовать:
Атрибуты приводят к более краткому синтаксису, при отсутствии детей. Сравните:
< название страницы = "Карта сайта"/>
к:
<page>
<name>Sitemap</name>
</page>
я знаю, какой я предпочитаю;
Так, от Вашего примера, Ваше самое внутреннее <page>
элемент имеет атрибут URL (хотя это - изображение по некоторым причинам - возможно, значок предварительного просмотра? Раз так название атрибута вводит в заблуждение). Веб-страница только (обычно) имеет один URL, таким образом, это было бы хорошим примером чего-то, что могло быть атрибутом.
, Если бы, с другой стороны, Вы хотели перечислить изображения на странице, мог бы, очевидно, быть больше чем один, таким образом, Вам были бы нужны элементы для этого.
, Но, в конце, большую часть времени нет никакого права, или неправильно ответьте, и это - в основном вопрос стиля.
Два примера не эквивалентны, потому что они образуют разные иерархии. Карта сайта - это список категорий, как в первом примере? Или это список страниц, как во втором примере?
Ответ на этот вопрос ортогонален вопросу «элемент против атрибута».
По вопросу «Элемент против атрибута»: Вот ваш второй пример, преобразованный в подход с использованием атрибутов:
<sitemap>
<page
category='Animals'
section='Dogs'
title='Great Dane'
url='/pics/greatdane.jpg'
/>
</sitemap>
Выше и ваш второй случай эквивалентны. Одно из соображений выбора одного из другого основано на том, можете ли вы изменить схему в будущем. Добавление атрибута к элементу url, как в следующем примере, вероятно, будет обратным совместимым изменением. Семантически такая же модификация была бы невозможна в подходе атрибута, поскольку вы не можете прикрепить атрибут к атрибуту.
<sitemap>
<page>
<category>Animals</category>
<section>Dogs</section>
<title>Great Dane</title>
<url nofollow="true">/pics/greatdane.jpg</url>
</page>
</sitemap>
Я думаю, что ответ довольно очевиден, когда Вы думаете о том, как Вы хотите добавить больше собак:
<sitemap>
<category name="Animals">
<section title="Dogs">
<page url="/pics/greatdane.jpg" title="Great Dane"/>
<page url="/pics/wienerdog.jpg" title="Wiener Dog"/>
</section>
</category>
</sitemap>
или
<sitemap>
<page>
<category>Animals</category>
<section>Dogs</section>
<title>Great Dane</title>
<url>/pics/greatdane.jpg</url>
</page>
<page>
<category>Animals</category>
<section>Dogs</section>
<title>Wiener Dog</title>
<url>/pics/wienerdog.jpg</url>
</page>
</sitemap>
Обычно нет правильных или неправильных ответов на подобные вещи. В основном это зависит от того, как вам нужен доступ к вашим данным.
Одна приятная вещь о первом - это то, что он легко, возможно позже, поддерживает несколько страниц в разделе и несколько разделов в категории. Во втором эта информация распространяется по страницам.
XML является ужасным форматом файла и заканчивается в религиозных войнах. Сделайте то, что Вы чувствуете, является лучшим в то время, если можно выровнять по ширине его. Однако Ваши конкретные примеры существенно отличаются:
В 1, карта сайта инкапсулирует категорию, инкапсулирующую раздел, который инкапсулирует страницу.
В 2, карта сайта инкапсулирует страницу, которая инкапсулирует три объекта: категория, раздел, заголовок и URL. Ни один из этих трех объектов не содержит никакого другого, они - одноуровневые элементы, все обычно сохраненные в странице.
Как две различных структуры, это зависит, на котором Вы предназначили.
А различным вопросом было бы предпочтение атрибутов по сравнению с тегами первого уровня. Но поскольку я говорю, который является отличающийся вопрос!
Я использую элементы для данных и атрибуты для метаданных
Я предпочитаю второе. Элементы должны использоваться для описания данных (который является главным образом, что Вы делаете). Атрибуты используются для значений, не относящихся к данным, таких как макс. размер для элемента, например.
IBM опубликовала статью под названием Принципы проектирования XML , в которой приведены некоторые рекомендации относительно того, когда следует использовать атрибуты и элементы. Я нашел эту статью полезной, ваш пробег может отличаться.
Первая альтернатива масштабируется немного лучше. Предположим, что необходимо добавить другой атрибут раздела животных, такого как состояние раздела. Я предполагаю что это представление:
<sitemap>
<category name="Animals">
<section title="Dogs" status="draft">
...
</section>
</category>
</sitemap>
делает лучшее задание передачи следующих фактов:
Короче говоря, это делает иерархическую структуру более ясной, и шоу, которые атрибуты применяют на каждом уровне иерархии.
Простое практическое правило: если вы можете реализовать структуру данных в виде неупорядоченной карты пар имя / значение, вы можете использовать атрибуты элемента для его представления. Если вы не можете (если, например, у вас будет несколько имен, или у данного имени будет несколько связанных значений, или порядок пар имя / значение является значительным), тогда элемент с атрибутами является неправильным представлением .
Две другие вещи, которые могут сделать это неправильное представление:
Очевидное преимущество использования атрибутов состоит в том, что они приводят к более резкому XML. Они (очень) немного быстрее разбираются, чем элементы тоже.