HTML Escape к PHP или Эху Использования? Который лучше?

Это может быть слишком много, но я использую методы расширения, например, следующие. Они проверяют интерфейсы, а также подклассы. Он также может возвращать тип, который имеет указанное общее определение.

Например. для примера в вопросе он может протестировать как общий интерфейс, так и общий класс. Возвращаемый тип можно использовать с GetGenericArguments, чтобы определить, что общий тип аргумента - «SomeType».

/// <summary>
/// Checks whether this type has the specified definition in its ancestry.
/// </summary>   
public static bool HasGenericDefinition(this Type type, Type definition)
{
    return GetTypeWithGenericDefinition(type, definition) != null;
}

/// <summary>
/// Returns the actual type implementing the specified definition from the
/// ancestry of the type, if available. Else, null.
/// </summary>
public static Type GetTypeWithGenericDefinition(this Type type, Type definition)
{
    if (type == null)
        throw new ArgumentNullException("type");
    if (definition == null)
        throw new ArgumentNullException("definition");
    if (!definition.IsGenericTypeDefinition)
        throw new ArgumentException(
            "The definition needs to be a GenericTypeDefinition", "definition");

    if (definition.IsInterface)
        foreach (var interfaceType in type.GetInterfaces())
            if (interfaceType.IsGenericType
                && interfaceType.GetGenericTypeDefinition() == definition)
                return interfaceType;

    for (Type t = type; t != null; t = t.BaseType)
        if (t.IsGenericType && t.GetGenericTypeDefinition() == definition)
            return t;

    return null;
}
41
задан Paolo Bergantino 3 February 2009 в 10:50
поделиться

12 ответов

Это - все, о котором Вы находите самое читаемое. Конечно, это будет меняться в зависимости от каждой ситуации. Если бы Вы делали всю страницу, и были большие разделы, которые не имели никакого PHP в ней, то я убежал бы из PHP и просто записал бы плоскости HTML, тогда как, если бы был раздел, который имел много переменных PHP, то я сделал бы все это в PHP.

, Например:

<table>
    <tr>
        <td colspan="<?php echo $numCols; ?>">
            <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?>
        </td>
    </tr>
</table>

по сравнению с:

<?php
echo "<table>"
    . "<tr>"
    .    "<td colspan=\"" . $numCols . "\">"
    .        $a . ", " . $b . " and " . $c
    .    "</td>"
    . "</tr>"
    . "</table>"
; ?>

Или

<?php
echo "<table>
         <tr>
            <td colspan='{$numCols}'>
               {$a}, {$b}, and {$c}
            </td>
         </tr>
      </table>";
?>

Также не забывают приблизительно printf

<?php
printf("<table>"
    . "<tr>"
    .    "<td colspan=\"%d\">%s, %s and %s</td>"
    . "</tr>"
    . "</table>"
    , $numCols
    , $a
    , $b
    , $c
);
?>
33
ответ дан Caleb White 23 September 2019 в 14:56
поделиться

Давайте процитируем руководство :

пример, данный здесь, изобретен, конечно, но для вывода большие блоки из текста, выпадая из PHP парсинг режима обычно более эффективен, чем отправка всего текста через эхо () или печать ().

<час>

, Но слушайте другие и избегайте этого вида микро оптимизации и выберите ту, которая является более четкой.

я могу предложить третье решение? Вы услышали о движках шаблонов? Они помогают Вам создать четкое разделение между кодом и презентацией, которая обычно приводит к более чистому коду, который легче поддержать. Популярное, которое такой движок шаблонов, например, присяжный острослов , но существует сотни с различными преимуществами.

22
ответ дан Georg Schölly 23 September 2019 в 14:56
поделиться

, Какой бы ни является самым легким читать.

различие в производительности довольно незначительно по сравнению с почти любой другой проблемой, с которой Вы встретитесь. Определенно удобочитаемость, передает первый выпуск сюда.

31
ответ дан nickf 23 September 2019 в 14:56
поделиться

Это довольно не важно общей скорости Вашего приложения, с каким Вы идете.

Однако я знаю, что Вы сказали, что не заботитесь, но используйте 2-й, как это о миллион раз, легче читать. И удобочитаемость огромна .

8
ответ дан Paolo Bergantino 23 September 2019 в 14:56
поделиться

Я не знаю о производительности этого, но в PHP можно также использовать то, чему я верю, назван "Heredoc", который я думаю, помогает с удобочитаемостью в этом виде вывода.

пример Nickf:

<table>
    <tr>
        <td colspan="<?php echo $numCols; ?>">
            <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?>
        </td>
    </tr>
</table>

становится:

<?php
echo <<<EOT
<table>
    <tr>
        <td colspan="$numCols">
            $a , $b, and  $c
        </td>
    </tr>
</table>

EOT;

?>

я действительно полагаю, что в конечном счете удобочитаемость является субъективной вещью, таким образом, Ваш пробег может варьироваться!

Ruth

8
ответ дан notruthless 23 September 2019 в 14:56
поделиться

Это нужно считать большим количеством удобочитаемости и проблемы обслуживания, чем проблема производительности.

Таким образом, опция 2 имеет пару конкретных преимуществ:

  1. окраска Кода. С опцией 1 все окрашено как оператор эха, который делает чтение HTML более трудный.
  2. Intellisense - Со многими IDE, HTML в операторе эха PHP не затронет intellisense, таким образом, Вы будете вводить весь тот HTML вручную.
3
ответ дан Cory House 23 September 2019 в 14:56
поделиться

С точки зрения производительности... это не важно. Удобочитаемость кода является королем, крошечная часть процента различия в производительности не собирается изменять что-либо.

необработанную версию HTML является обычно самым легким считать (и вероятно имеет лучшую производительность слишком если это имеет значение - но что это стоит: ничто). Это не удивительно: PHP является языком шаблонной обработки HTML, целое , точка чередует HTML на уровне синтаксиса языка.

Взгляд на код nickf, чтобы видеть, как сохранить это читаемым. Расположение с отступом важно! Поместите уровень расположения с отступом в каждой управляющей структуре PHP также, таким образом, можно отслеживать их. например:

<?php if ($error) { ?>
    <p> Oh no, error! </p>
<?php } ?>

Наконец, при выводе содержания, такого как $container в примере, Вы всегда должны htmlspecialchars () это, или у Вас будет приложение полным инжекционных HTML дыр в системе безопасности, как любой новичок PHP (и даже многие профессиональные разработчики, печально). Это имеет значение, какой бы ни метод Вы используете для вывода содержания.

, поскольку htmlspecialchars является вполне раздражающе длинным именем функции, Вы могли попытаться определить свою собственную функцию ярлыка:

<?php
    function h($s) {
        echo(htmlspecialchars($s, ENT_QUOTES));
    }
?>

<ul>
    <?php foreach ($things as $thing) { ?>
        <li> <?php h($thing['name']) ?> </li>
    <?php } ?>
</ul>
3
ответ дан bobince 23 September 2019 в 14:56
поделиться

Вы никогда не должны серьезно считать размещение PHP в HTML. Вы смешиваете логику с представлением, которое делает проект грязным.

, Поскольку другие сказали, если Вы производите в HTML, используйте <?php echo $whatever; ?>

, Если необходимо произвести тонну информации, изучают выходную буферизацию.

1
ответ дан Syntax 23 September 2019 в 14:56
поделиться

Код, как будто следующий программист, занимающий проект, является серийным убийцей. Другими словами, используйте вторую опцию, которую Вы упомянули.

3
ответ дан Mario 23 September 2019 в 14:56
поделиться

Последний намного более читаем. Это также более легко доступно для редактирования (Вы не должны выходить из кавычек в HTML, например). И это сохраняет пробел без любой стычки, которая может быть предпочтена, особенно для отладки целей.

я почти желаю, чтобы PHP позволил бы print() и echo() автоматически преобразовать символы HTML так, чтобы люди прекратили использовать их для генерации HTML.

1
ответ дан eyelidlessness 23 September 2019 в 14:56
поделиться

Это попадает в область микро оптимизации. Самая большая часть Вашего времени попадает в инициализацию механизма PHP, начинающего работу.

Поэтому, если у Вас нет порядка десятков тысяч строк (или еще больше), Вы не должны быть обеспокоены им.

Для добавления я сделал маленький тест миллиона строк, где я использовал php для печати их и где я использовал php для вызова c программы, которая сделала то же самое, и различие было крохотным.

Немного больше информации

, Что происходит в 2-м примере, - то, что Вы "поворачиваете" PHP включения - выключения, не точно, что происходит, но для этого примера он соответствует.

дело, Вы должны быть более взволнованы по поводу, тот код, идет иметь большую логику вокруг этого? Я собираюсь разделить ту строку еще на большее количество строк или даже поместить ее в различные места? Действительно ли это - Представление приложения MVC?

Для 1 и 2 это мог быть бросок между любым методом. Но для 3 я пошел бы с методом 2 по этим причинам.

представление А в веб-приложении MVC является главным образом html/css. Таким образом, я хочу видеть, что быть отформатированным правильно и я хочу видеть в своем редакторе окраску HTML. Таким образом, это плюс.

5
ответ дан Ólafur Waage 23 September 2019 в 14:56
поделиться

Для маленьких битов я просто сохраняю все это в строках PHP, как когда цикличное выполнение через массив для генерации списка. Но для больших груд разметки я не допускаю это в PHP и просто заскакиваю в PHP при необходимости.

Это в основном, потому что я предпочитаю оптимизировать для пригодности для обслуживания. Не только, потому что это быстрее для наблюдения то, что продолжается, когда HTML применили соответствующую подсветку синтаксиса, но потому что это также делает ошибки, следующие из дефектного чтения кода менее вероятно для появления.

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

2
ответ дан Trevor Bramble 23 September 2019 в 14:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: