Интенсивное использование PHP " - PullRequest
10 голосов
/ 13 января 2011

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

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

Ответы [ 7 ]

17 голосов
/ 13 января 2011

Что касается читабельности, я бы предпочел:

  <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 может быть предпочтительнее.

РЕДАКТИРОВАТЬ: что касается производительности, любой, кто серьезно относится к скорости кода, активирует предварительный компилятор кэширования, который сводит обе версии к одному и тому же.

3 голосов
/ 13 января 2011

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

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

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

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

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

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

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


@ Митч

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

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

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

2 голосов
/ 13 января 2011

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

<?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>";
   }
?>

Меньше экранирующих символов, о которых нужно беспокоиться.

0 голосов
/ 13 января 2011

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

0 голосов
/ 13 января 2011

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

0 голосов
/ 13 января 2011

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

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

0 голосов
/ 13 января 2011

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

Так и сделай.

...