2011-01-13 2 views
10

Некоторые PHP-коды, на которые я смотрю, усеяны тегами «<? Php» и «? >» в зависимости от того, выводит ли он HTML или нет. Есть ли какое-то преимущество в производительности, а не использование эха для написания HTML? Это делает код чрезвычайно трудным для чтения, когда код постоянно переключается между кодом и HTML через тег <? Php.Тяжелое использование тега «<? Php» PHP

Обратите внимание, что я не просто говорю о случайном переключении. Код, который я сейчас просматриваю (исходный код mantis-bt), дает мне головную боль с количеством переходов. Очень очень трудно читать. Мне интересно, есть ли причина, по которой они это делают?

+4

Не проблема с производительностью, если вы не являетесь Facebook. –

+2

Когда страница в основном является HTML, консенсус (по крайней мере, в любом случае) кажется, что интенсивное использование эха - это плохая форма. С другой стороны, если страница не отделяет логику управления и бизнес-логику от отображения, это тоже считается плохим. Я слышал анекдотически, что накладные расходы для «эха» сопоставимы с накладными расходами на включение и выключение блоков «», но не могут найти ссылку для вас. – RobertB

+0

Независимо от погоды в вашем facebook, вы все равно должны слушать и учиться методам использования Facebook, а также многим другим крупным сайтам. – RobertPitt

ответ

17

Насколько читаемость идет, я предпочел бы видеть:

<ul> 
     <?php foreach ($items as $item): ?> 
      <li> 
       <a href="<?php esc($item->url)?>"> 
       <img src="<?php esc($item->icon)?>"/> 
       <?php esc($item->text)?> 
      </li> 
     <?php endforeach; ?> 
    </ul> 

чем:

echo "<ul>"; 
    foreach ($items as $item) 
    { 
    echo "<li>"; 
    echo '<a href="'.esc($item->url).'">'; 
    echo '<img src="'.esc($item->icon).'"/>'; 
    echo esc($item->text); 
    echo '</li>'; 
    } 
    echo "</ul>"; 

Не только это, но последний позволяет ваш IDE выбор обрабатывать синтаксис HTML и форматирование (говоря вам, например, что отсутствует </a>). Таким образом, если в промежутках между короткими битами HTML не будет много больше, возможно, предпочтительнее <?php.

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

+0

вместо ' 'Почему не' img ($ item-> icon) ' – RobertPitt

+0

@Robert вы можете добавить текст alt к этой вещи. – PeeHaa

+0

затем 'img ($ item-> icon," location "," alt ", array (" classes "," here "))' это просто кажется намного опрятным, и когда вы получаете шаблоны от обычных пользователей, он будет придерживаться вашего html создание, таким образом уменьшая недействительный html – RobertPitt

0

Хотя это не вызовет каких-либо заметных эффектов в отношении времени выполнения кода, идея о том, что это единственное место, которое должна рассчитывать «производительность», смехотворна. Разработчики стоят денег. Таким образом, очистка всего этого - повышение производительности! Ваше собственное представление!

Итак, сделайте это.

0

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

В двух словах, чтобы использовать дополнительные функции, которые мы должны использовать PHP или какой-либо другой язык

+0

Я думаю, вы не поняли мой вопрос. Я не спрашиваю, почему мы я использую PHP. Я спрашиваю, почему код, содержащий много PHP-кода, чувствует необходимость постоянно переключаться на не-PHP, чтобы просто откликнуться на некоторый HTML. Вместо того, чтобы просто использовать команду echo. – Dan

2

Причина может быть как то для таких ситуаций:

<?php if($logged_in) { ?> 
    <span class="x">Welcome, <?= $_SESSION['user'] ?></span> 
    <a href="logout.php">Logout</a> 
<?php } ?> 

Вместо:

<?php 
    if($logged_in) { 
     echo "<span class=\"x\">Welcome, " . $_SESSION['user'] . "</span>"; 
     echo "<a href=\"logout.php\">Lougout</a>"; 
    } 
?> 

Есть меньше символов побегов беспокоиться о.

+1

Но в вашем примере вы могли бы использовать только одну цитату, а не избегать их. – Dan

+1

Почему бы вам просто не использовать одинарные кавычки ??? – PeeHaa

+1

Мне лично нравится лучший пример лучше. Если вы хотите изменить свой HTML или получить обновление с другой страницы, его легко удалить. – Don

3

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

Что вы должны делать, так это разделение вашего дизайна от вашего логического php-кода, а компиляция проекта должна быть выполнена в конце выполнения сценариев.

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

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

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

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

Надеюсь, это поможет вам начать миграцию, потому что я, конечно же, не советую вам продолжать работать с таким приложением.


@mitch

Событие думал, что вы второй кусок кода чист его еще совмещая вид с остальной частью вашего приложения, где это должно быть вот так:

<html> 
    <?php $this->load("segments/head"); ?> 
    <body> 
     <?php echo $this->wrap("span",$this->link("Some Linke",$this->var("homepage"))) ?> 
    </body> 
</html> 

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

0

У меня нет статистических данных, чтобы поддержать это, но я понимаю, что более эффективно «выключать» php для вывода HTML, а не использовать echo »; Причина в том, что когда вы запускаете свой html через теги эха, у вас есть PHP, чтобы разобрать его, чтобы отображать его, а просто вставлять его в сам документ, чтобы браузер отображал его БЕЗ необходимости иметь PHP для его анализа.

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

+2

Микро-оптимизации в лучшем случае ... – ircmaxell

0

Я предпочитаю использовать <?php и ?>, потому что читать их проще, но , если любой потери производительности будет очень мало. Я написал HTML с echo, но очень плохо читать и находить проблемы в HTML.