Это может быть слишком много, но я использую методы расширения, например, следующие. Они проверяют интерфейсы, а также подклассы. Он также может возвращать тип, который имеет указанное общее определение.
Например. для примера в вопросе он может протестировать как общий интерфейс, так и общий класс. Возвращаемый тип можно использовать с 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;
}
Это - все, о котором Вы находите самое читаемое. Конечно, это будет меняться в зависимости от каждой ситуации. Если бы Вы делали всю страницу, и были большие разделы, которые не имели никакого 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
);
?>
Давайте процитируем руководство :
<час>пример, данный здесь, изобретен, конечно, но для вывода большие блоки из текста, выпадая из PHP парсинг режима обычно более эффективен, чем отправка всего текста через эхо () или печать ().
, Но слушайте другие и избегайте этого вида микро оптимизации и выберите ту, которая является более четкой.
я могу предложить третье решение? Вы услышали о движках шаблонов? Они помогают Вам создать четкое разделение между кодом и презентацией, которая обычно приводит к более чистому коду, который легче поддержать. Популярное, которое такой движок шаблонов, например, присяжный острослов , но существует сотни с различными преимуществами.
, Какой бы ни является самым легким читать.
различие в производительности довольно незначительно по сравнению с почти любой другой проблемой, с которой Вы встретитесь. Определенно удобочитаемость, передает первый выпуск сюда.
Это довольно не важно общей скорости Вашего приложения, с каким Вы идете.
Однако я знаю, что Вы сказали, что не заботитесь, но используйте 2-й, как это о миллион раз, легче читать. И удобочитаемость огромна .
Я не знаю о производительности этого, но в 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
Это нужно считать большим количеством удобочитаемости и проблемы обслуживания, чем проблема производительности.
Таким образом, опция 2 имеет пару конкретных преимуществ:
С точки зрения производительности... это не важно. Удобочитаемость кода является королем, крошечная часть процента различия в производительности не собирается изменять что-либо.
необработанную версию 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>
Вы никогда не должны серьезно считать размещение PHP в HTML. Вы смешиваете логику с представлением, которое делает проект грязным.
, Поскольку другие сказали, если Вы производите в HTML, используйте <?php echo $whatever; ?>
, Если необходимо произвести тонну информации, изучают выходную буферизацию.
Код, как будто следующий программист, занимающий проект, является серийным убийцей. Другими словами, используйте вторую опцию, которую Вы упомянули.
Последний намного более читаем. Это также более легко доступно для редактирования (Вы не должны выходить из кавычек в HTML, например). И это сохраняет пробел без любой стычки, которая может быть предпочтена, особенно для отладки целей.
я почти желаю, чтобы PHP позволил бы print()
и echo()
автоматически преобразовать символы HTML так, чтобы люди прекратили использовать их для генерации HTML.
Это попадает в область микро оптимизации. Самая большая часть Вашего времени попадает в инициализацию механизма PHP, начинающего работу.
Поэтому, если у Вас нет порядка десятков тысяч строк (или еще больше), Вы не должны быть обеспокоены им.
Для добавления я сделал маленький тест миллиона строк, где я использовал php для печати их и где я использовал php для вызова c программы, которая сделала то же самое, и различие было крохотным.
Немного больше информации
, Что происходит в 2-м примере, - то, что Вы "поворачиваете" PHP включения - выключения, не точно, что происходит, но для этого примера он соответствует.
дело, Вы должны быть более взволнованы по поводу, тот код, идет иметь большую логику вокруг этого? Я собираюсь разделить ту строку еще на большее количество строк или даже поместить ее в различные места? Действительно ли это - Представление приложения MVC?
Для 1 и 2 это мог быть бросок между любым методом. Но для 3 я пошел бы с методом 2 по этим причинам.
представление А в веб-приложении MVC является главным образом html/css. Таким образом, я хочу видеть, что быть отформатированным правильно и я хочу видеть в своем редакторе окраску HTML. Таким образом, это плюс.
Для маленьких битов я просто сохраняю все это в строках PHP, как когда цикличное выполнение через массив для генерации списка. Но для больших груд разметки я не допускаю это в PHP и просто заскакиваю в PHP при необходимости.
Это в основном, потому что я предпочитаю оптимизировать для пригодности для обслуживания. Не только, потому что это быстрее для наблюдения то, что продолжается, когда HTML применили соответствующую подсветку синтаксиса, но потому что это также делает ошибки, следующие из дефектного чтения кода менее вероятно для появления.
действительно нет лучшего способа. Я просто пытаюсь остаться согласовывающимся с тем, что описано выше, и держите глаза открытыми для ситуаций, где, возможно, другим путем был бы лучший способ обработать его.