PHP 코드 내부 또는 외부에 HTML을 포함시키는 것이 더 낫습니다.


28

이거 봐요:

<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>

그리고 지금 이것을보십시오 :

<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>

위의 예제 중 어느 것이 더 나은 것으로 간주됩니까 (적어도 성능 관점에서) ?.

나는 예제가 사소한 것이라는 것을 알고 있지만 처음부터 좋은 습관을 따르고 싶습니다. 더 많은 라인이있을 때 성능이나 부정적인 방식으로 영향을 미치지 않습니다.


14
이것은 PHP에서 큰 인기를 얻지는 않지만 다른 생태계에서는 둘 다 나쁜 것으로 간주되며 적절한 대안은 최소한의 로직으로 모든 정적 부품의 템플릿을 만들어 동적 부품을 포함시킨 다음 렌더링하는 것입니다. 프로그래밍 언어.

1
@delnan-답변을 약간 확장 된 형태로 게시하는 것을 고려해야합니다. 훨씬 더 깨끗합니다.
jmort253

@ jmort253 그것을 고려했지만 PHP 지식이 거의 없으므로 PHP 세계에서 모범 사례를 말할 수 없었습니다.

어떤 문제를 해결하려고합니까?
Jim G.

성능면에서는 중요하지 않습니다. 비교하면 네트워크 속도가 너무 느립니다. 이전 비용이 상당히 높기 때문에 발전 비용이 중요하지 않습니다.
Martin York

답변:


23

주석에서 지적했듯이 템플릿에 의해 수행되어야합니다. 그러나 두 가지 선택 만 가능하다면. 사례 1이 더 좋습니다. 이것은 xml에 의한 안드로이드 팽창 레이아웃이나 프로그래밍 방식으로 UI를 만드는 것과 같은 개념입니다. 귀하 <br/>는 귀하의 HTML에서 정적 콘텐츠이며 귀하의 모든 서버에서 수행하는 것은 그것을 보여주는 것입니다. 그러나 PHP를 사용하여 실행하면 서버 리소스를 사용하고 컴퓨팅됩니다.

이것이 어떻게 수행되어야 하는가 : index.php :

<?php
include 'header.html';
...
include 'footer.html';  
?>  

header.html 및 footer.html은 템플릿입니다.


1
컨트롤러와 템플릿이라는 것에 관한 "PHP & MySQL Novice to Ninja"인 Kevin Yank의 책을 읽었습니다. 이것들은 당신이 나에게 말했던 것과 같은 것입니까, 아니면 다른가요? 그들이 동일한 경우 다른 파일에 코드를 넣는 것이 어떻게 더 나은 성능을 낼 수 있습니까?
라쉬드

템플릿을 사용하면 웹 사이트 또는 응용 프로그램을보다 쉽게 ​​수집 할 수 있습니다. StackOverflow의 머리글과 바닥 글 또는 게시물이 어떻게 동일한 지 확인합니까? 그들은 동일한 템플릿을 사용하고 동적 데이터로 채 웁니다.
wtsang02

그 뒤에 주요 이유는 무엇입니까? 그렇게하지 않으면 어떻게됩니까? 우리는 무엇을 잃을 것인가?
라쉬드

이것을 보자. 이 답변 게시물의 네 번째 주석입니다. 소스에서이 페이지를 보면 "<div> <span ...> ... </ span> <a ...> ... </a>"4000 번째 주석을 코딩하는 이미징 핸드가 표시됩니다. 가능합니까? 또는 템플릿으로 만들고 서버가 필요할 때 이것을 '추가'하십시오.
wtsang02

1
또한 @wtsang, 당신은 그 두 가지 선택만을 가질 수 없으며, 항상 세 번째, 달리기 (또는 배우기)를 가지고 있습니다.
ocodo

54

질문에 직접 대답하려면 정적 텍스트 나 HTML을 에코 하지 마십시오 . PHP 외부에 두십시오.

<?php echo "<p>Hello World</p>"; // Alway wrong. ?>

<p>Hello World</p>  <!-- Does the same thing, faster, and is more readable. -->

정적 텍스트 또는 정적 HTML을 전달하는 것만으로 PHP로 탈출하는 것은 낭비입니다. 내부의 모든 코드 <?php ?>는 PHP로 전송되어 해석됩니다. 이는 귀하의 웹 사이트가 느려지고 아무 이유없이 많은 양의 정적 텍스트를 PHP로 전달하는 경우 전기를 낭비하고 있음을 의미합니다. (때로는 이유가 있습니다.)

모범 사례는 HTML없이 PHP만으로 파일에서 논리와 그 루트 한 작업을 수행하는 것입니다.

내가 이것을 좋아하는 방법은 MVC 프레임 워크를 사용하는 것입니다. 모델과 컨트롤러에는 순수한 PHP가 있고 뷰에는 HTML과 PHP가 혼합되어 있습니다. MVC 프레임 워크가 필요하지 않습니다. HTML 파일을 템플릿 파일에 붙여 넣고 순수 PHP 파일에 포함시킬 수 있습니다.

순수 PHP 파일로 변수 (HTML을 포함하지 않음)를 만든 후에는 HTML을 사용하여 파일로 전달할 수 있습니다. HTML과 PHP를 혼합하는 것이 좋습니다. 그러나 이것은 중요하지만 HTML이있는 파일로 작업 할 때는 PHP를 최소한으로 유지하십시오.

운 좋게도 PHP에는 HTML과 혼합 된 경우 PHP를 쉽게 읽을 수있는 친숙한 도구가 제공됩니다.

대체 구문

가장 좋은 방법은 순수한 PHP를 작성할 때 일반 PHP 구문을 사용하는 것이지만 PHP와 HTML을 혼합 할 때는 대체 구문을 사용하는 것입니다.

HTML이없는 일반 PHP 파일에서 :

if ($something) {
  do_something(); // do_something() shouldn't echo or print.
}

순수 PHP에는 적합하지만 HTML에서 벗어날 때는 이상적이지 않습니다. 특히 닫는 괄호는 HTML의 큰 더미에 나타날 때 이해하기 어려운 경우가 많습니다.

귀하의 질문에 따라 HTML과 PHP가 혼합 된 파일로 작성했을 것입니다.

<?php
  if ($something) {
    echo '<p>Hello World.</p>';
  }
?>

위에서 설명한 이유로 HTML을 PHP로 보내지 않기를 원합니다. 우리는 이렇게합니다 :

<?php if ($something) { ?>
  <p>Hello World.</p>
<?php } ?>

PHP 태그에서 HTML을 얻었습니다. 이는 개선 된 것입니다. 그러나 우리는 더 나아갈 수 있습니다.

닫는 버팀대가 얼마나 유익하지 않습니까? 루프 또는 if 문을 닫고 있는지 알 수 없습니다. 위의 예제에서는 사소한 것처럼 보이지만 루프 / 엔드 루프 안에 if / endif 안에 수십 줄의 HTML이있는 경우가 많습니다.

가장 좋은 방법은 PHP와 HTML을 혼합 한 파일에서 중괄호 ( { })를 열고 닫는 대체 구문을 사용하는 것입니다 .

<?php if ($something): ?>
  <p>Hello world.</p>
<?php endif; ?>

이외에도 (새로운 구문의 의미에서 :endif;대신 {}), 당신은 두 가지를주의해야 :

  1. 다시 말하지만 HTML과 텍스트는 PHP에 의해 제어되지만 <?php ?>태그 외부에 있으므로 해석되지 않습니다. 위에서 설명한 이유로, 이것이 좋습니다.
  2. 이것은 이것이 임의의 닫는 괄호 ( <?php } ?>)를 포함하여 모두 PHP 인 경우보다 훨씬 더 유익 합니다. 다시, 루프와 if 문이있는 큰 HTML 파일을 상상해보십시오. 닫는 것을 지정하면 많은 것을 알 수 있습니다.

동일한 템플릿 친화적 구문을 루프에도 사용할 수 있습니다.

<?php foreach ($things as $thing): ?>
  <li><?php echo $thing; ?></li>
<?php endforeach; ?>

짧은 태그

PHP가 제공하는 또 다른 훌륭한 도구는 PHP와 HTML을 함께 혼합 할 때만 사용하려는 짧은 태그입니다. php.ini 파일에서 짧은 태그를 켜야 할 수도 있습니다. 일단 켜면 짧은 태그로 모든 것을 더 읽기 쉽게 만듭니다.

짧은 태그가 없으면 작성해야 <?php echo $something; ?>하지만 짧은 태그를 사용하면 작성할 수 <?=$something?>있으며 결과는 동일합니다.

짧은 태그와 대체 PHP 구문을 결합하면 PHP 요소를 포함하는 우아한 HTML 파일을 실제로 작성할 수 있습니다. 마지막 루프 예제 (루프 내부의 일부)를 살펴보면 짧은 태그를 사용하여 다음을 줄일 수 있습니다.

<li><?php echo $thing; ?></li>

<li><?=$thing?></li>

훨씬 더 읽기 쉽습니다.

더 나아갈 수 있을까요? 예. 다양한 템플릿 시스템을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

<li>{thing}</li>

놀랍게도 읽을 수 있습니다. 그러나 템플릿 시스템은 원래 질문의 범위를 벗어났습니다 (어쨌든 얼마 전에 남았습니다).


4
+1 모두에게 좋은 조언을 제공합니다. 대체 제어 구문과 짧은 태그는 템플릿을 시작하고 논리와 프리젠 테이션을 분리하는 데 매우 중요합니다.
Will Meldon

1
짧은 태그는주의해서 사용해야합니다. 재사용 할 코드를 작성하는 경우 short_open_tag지시문이 항상 켜져 있다고 보장 할 수 없습니다 . PHP 5.4 는 비활성화되어 <?=$thing?>있어도 항상 사용 가능합니다 short_open_tag. 또한 short_open_tagXML과의 충돌을 방지하기 위해 기본적으로 해제되어 있습니다.
Chris

3
최고의 대안으로 진행하면서 다양한 대안을 제시 한 +1
Tola Odejayi

1
어쩌면 그것은 사실이지만 PHP7에서 opcode (즉, 엔진에서 실제로 실행하는 것)를 확인했으며 PHP / HTML을 혼합해도 정적 텍스트를 전달하지 않아도 전기를 절약 할 수는 없습니다. <?php $foo='ABC'; echo '<div>', $foo, '</div>'그리고 <?php $foo='ABC'; ?><div><?=$foo?></div>즉, 그들이있는 거 동일, 동일한 연산 코드 초래한다.
Qaribou에서 Josh

템플릿 시스템에 대한 참고 사항에서 예제를 허용하는 가장 간단한 템플릿 접근 방식은 간단한 heredoc입니다. Heredoc을 사용하면 <li>{$thing}</li>큰 따옴표보다 큰 따옴표를 피할 필요가 없으므로 큰 따옴표보다 유리하게 말할 수 있습니다 . heredoc을 할당하거나 함수에 전달할 수도 있으므로 블록에서 사용하는 경우 php / html보다 훨씬 깔끔합니다. array_reduce($items, function($s, $item) { $name = htmlspecialchars($item['name']); return $s . <<< EOT <li>{$name}: {$item['price']}</li> EOT; })
Qaribou에서 Josh

4

당신은 배우고 있습니다 .PHP 페이지의 성능을 잊어 버리십시오. 대신 가장 읽기 쉬운 방법을 선택하십시오 .

두 예제를 살펴보면 두 번째 예제를 읽는 것이 가장 쉬운 방법이지만 사용 한 간격 때문이라고 생각합니다. 처음부터 좋은 습관을 키우고 싶다고 말하면 코드를 잘 읽음으로써 시간을 더 잘 보낼 수 있다고 생각합니다. 이는 만족할 때까지 섹션을 여러 번 다시 작성하는 것을 의미 할 수 있습니다.

배후에 정말로 관심이 있다면 PHP 페이지에서 정적 컨텐츠로 어떤 일이 발생하는지 설명 할 것입니다. 첫 번째 사항 중 하나는 전체 페이지를 실행 가능한 코드로 "파싱"하는 것입니다 (예 : <?php ?>태그 사이에 표시됨). 이것의 한 부분은 정적 텍스트를로 바꾸는 것 echo입니다.

그래서 이건:

<?php echo "Hello World"; ?>
<br />
<?php echo "Welcome"; ?>

다음과 같이 변형됩니다.

echo "Hello World";
echo "<br />";
echo "Welcome";

파싱과 관련된 비용은 매우 적지 만 결과 코드 실행에는 차이가 없습니다. PHP 액셀러레이터를 사용하는 경우 구문 분석은 한 번만 수행 한 다음 캐시되므로 첫 번째 페이지로드 후 성능 차이가 나타나지 않습니다.

기억하기 쉽다 : 읽기 쉽다!


1
동의하지 않습니다. 그것은 단지 성과에 관한 것이 아니라 실제로 학습에 관한 것입니다. 잘못된 연습을 배우는 것은 좋은 조언이 아닙니다.
Isaac

echo문자 그대로 (언어가 암시하는) 의미 인 경우 "정적 텍스트"가로 바뀌는 것은 사실이 아닙니다 . 결과는 동일하지만 방법이 매우 다릅니다. "정적 텍스트"라고하는 것은 실제로 PHP에서 HTML로 빠져 나가는 것입니다. 이 경우 서버는 원시 텍스트를 보내기 시작합니다. PHP와 마찬가지로 파싱하지 않습니다 echo. 고려되지 않은 상황에서는 성능에 미치는 영향이 적을 수 있지만, 기계적인 차이는 중요합니다.
underscore_d

0

PHP의 가장 큰 특징 중 하나는 HTML에 포함되도록 디자인되었다는 것입니다. 일반적으로 템플릿을 만드는 데 사용됩니다. PHP 코드와 HTML을 분리하기 때문에 코드를보다 쉽게 ​​읽고 유지 관리 할 수 ​​있습니다.

그러나 "Hello World!"와 같은 정적 페이지 만 인쇄하는 경우 나쁜 생각입니다.


0

귀하의 질문에 간단히 대답하기 위해 : 예제 코드가 주어지면 성능 차이가 거의 없습니다. PHP는 서버 / 호스트 수준에서 처리되는 반면 HTML은 브라우저에서 웹 페이지를보고있는 사용자 에이전트 / 개인이 처리합니다. 누가 더 빠를까요? 결정하기 어렵다.

나는 각자 각자의 장단점이 있고 서로 잘 협력 할 수 있다고 말하는데 동의합니다. PHP는 프로그래밍이 가능하며 계산 및 변수 작업이 가능합니다. 이러한 이유로 모든 내 페이지는 PHP로 끝나고 언급 된대로 HTML 코드의 스 니펫을 호출하고 변수를 삽입하여 HTML이 동적이되도록합니다.

귀하의 예에서 HTML을 하나의 PHP 문으로 묶을 수 있습니다.

    <?php echo "Hello World<br>Welcome"; ?>

희망이 조금 더 명확 해집니다.


0

PHP 내에서 HTML을 사용하는 데에는 제한이 있습니다.

대부분의 경우 외부에 HTML이 있습니다. PHP를 사용하지 않는 것처럼 페이지를 만든 다음 필요한 부분에 PHP를 추가하십시오. 문서 내에 여러 개의 PHP 덩어리가있을 수 있습니다.

PHP 내부에서 HTML 사용하기 몇 가지 예가 있습니다 :

https://www.thoughtco.com/php-with-html-2693952


-1

일반적으로 PHP에서 HTML 코드를 출력하는 것은 잘못된 형식으로 간주됩니다. 여기에는 몇 가지 이유가 있지만 주된 이유는 HTML과 PHP 코드가 분리되어 있으면 특히 장기적으로 코드를 유지 관리하기가 더 쉽다는 것입니다.

HTML, CSS 및 Javascript와 같습니다. 분리하는 것이 훨씬 쉽고 실용적입니다.

그러나 기술적으로는 물건을 출력하는 방법에 전혀 차이가 없습니다 . PHP의 경우 행 단위로 바이트입니다.


6
차이가 있습니다. <?php echo 'hello'; ?>PHP로 전달됩니다. helloPHP로 전달되지 않습니다. PHP로 전달되는 것은 바이트 코드로 변환 된 다음 해석됩니다. 시간, 처리 능력 및 전기가 필요합니다.
Ted
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.