2011-01-14 4 views
2

Я беру на себя проект codeigniter и замечаю, что оригинальный dev использует в тегах смесь коротких тегов и тегов php. Например:Смесь коротких замыканий php

<div id="content"> 

     <?=show_header()?> 

     <ul id="products"> 
      <?php if (count($products) > 0) : ?> 
      <?php foreach($products as $product) : ?> 
      ... 
</div> 

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

EDIT: Что относительно <?= => теги INSIDE <? php ?> теги на некоторые виды? Например:

<ul> 
<?php foreach ($details as $detail) : ?> 
<?php $detail = split(',',$detail); ?> 
<?php if ($detail[0] != '') : ?> 
    <li> 
    <strong><?=ucwords($detail[0])?></strong> : <?=$detail[1]?> 
    </li> 
<?php endif; ?> 
<?php $i++; ?> 
<?php endforeach; ?> 
</ul> 

Это то, что меня смущает прямо сейчас.

ответ

7

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

Мой совет: всегда используйте теги с открытым тегом: <?php /*...*/ ?>.

Если бы мне дали ваш скрипт для работы или исправления, я бы остановился на линии 3, проклял и почесал голову, потому что это явно нечитаемо.

Кроме того, по строке 6 & 7, я бы предпочел использовать { вместо :, также для удобства чтения.

+2

У Codeigniter есть настройка конфигурации для автоматического преобразования в длинную форму, если вы когда-либо оказываетесь в среде, которая ее не поддерживает. – jondavidjohn

+0

Я нахожу альтернативный синтаксис для структур управления ('if:' 'endif;') более читаемым при смешивании PHP с HTML. Что-то вроде '' выглядит просто уродливо. :] –

1

Это плохая практика по двум причинам:

  1. Отсутствие кодирования последовательности
  2. Она будет работать только на веб-серверах с заходящего short_open_tag набор PHP для true

Для максимальной совместимости и мобильность, всегда использовать <?php ?>

+0

Обратите внимание, что CI предоставляет возможность переписывать короткие теги в полные теги, если это необходимо. Не то, чтобы это стоило накладных расходов или чего-то еще. Но мне нравится, что вы использовали слово «ultimate» :) – BoltClock

3

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

Если вы не возражаете, позволяя CI переписать короткие открытые теги для полных открытых тегов, а затем использовать короткие открытые теги, если вы их любите, но только в ваших просмотра файлов:

$config['rewrite_short_tags'] = true; 

Но смешивая их в тот же файл вида или приложение CI - это только nasty.

3

ИМО, да, это плохая практика. Короткие теги могут казаться более удобными в использовании, но они не так совместимы, как полные теги. Поэтому вы всегда должны придерживаться полных тегов.

Даже если вам нужно использовать короткие теги, по крайней мере, не смешивайте их в одном файле.

1

Строго говоря, короткий тег echo <?= ?> и стандартный тег PHP <?php ?> делают разные вещи (и иногда используются вместе). Используя <?php ?> и его эквивалент коротких тегов <? ?> в одном файле несовместим, и обе формы коротких тегов теперь обескуражены, так как они запланированы на deprecated in PHP6.

Однако.CodeIgniter обрабатывает теги стиля эха в качестве основного механизма шаблонов (как и теги Smarty). Я настоятельно рекомендую использовать теги echo в представлениях CodeIgniter для переменных, поскольку они делают представление более понятным как HTML/XML/и т. Д.

<p><?= $text ?></p> 

Versus:

<p><?php echo $text ?></p> 

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

Смежные вопросы