모든 줄에 <? php와?>가있는 이유


24

나는이 컨벤션을 거의 모든 곳에서 보았고 때로는 나를 몰아 넣는 것에 가깝습니다.

<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; // end of the loop. ?>

어디 <?php와 닫는는 ?>더 개입 HTML 코드가없는 경우에도, 모든 한 줄에 있습니다.

내 질문은 : 왜? 왜 이러한 모든 추가 태그를 포함합니까?

나 에게이 규칙은 코드에 많은 양의 혼란을 더하고 처음부터 따르기가 성가 시며 실수로 시작하거나 닫는 태그를 남기지 않는 더 많은 장소를 추가하는 것으로 보입니다.

노트

이 코드는 WordPress에서 제공하는 Twenty-Twelve 테마에서 가져온 코드입니다.


또한 속기 ==
Tom J Nowell

3
닫는 것으로 플래그 지정-이 질문에 대한 명확한 대답은 없으며 확실히 WP 관련 문제는 아닙니다. PHP를 사용하는 사람이라면
누구나이

3
@anu : 첫째, 질문에 항상 하나의 결정적인 답변이있는 것은 아닙니다 (아직 최선의 답변이있을 수도 있음). 가이드 라인에는 "실용적이고 응답 가능"이라고되어 ​​있습니다. 둘째, 그렇습니다. 이것은 기술적으로 PHP 문제이지만 짧은 시간에 WP로 작업하는 동안 훨씬 더 많이 보았습니다. 따라서 이것이 WP에 국한되지는 않지만 WP 설정에서 요청할만큼 충분히 상관있는 것으로 보입니다.
Indigenuity

답변:


20

이것은 WordPress 스타일 가이드에서 권장되지 않으며 나쁜 코딩 스타일이라고 생각합니다. 초보자는이 스타일을 사용하고 있습니다. 아마도 HTML과 같은 느낌이 들기 때문일 것입니다…

불행히도 기본 테마는이 스타일을 너무 자주 사용하므로 일부 초보자는 이것이 코드 스타일의 일부라고 생각할 수 있습니다.

이 스타일의 한 가지 단점은 주석 처리입니다. 다음 예제와 저자가 기대하는 것을 수행하지 않는 방법을 자세히 살펴보십시오.

<?php echo 'Important: '; // announcement ?>
<?php echo ' enter the word '; /* start ?>
<?php echo '<b>password</b>'; /* the end */ ?>

행운을 빌어 디버깅. :)

규칙 : 두 언어로 출력을 작성해야하는 경우에만 PHP와 HTML 컨텍스트 사이를 전환하십시오. 다른 모든 경우에는 정기적으로 줄 바꿈을 사용하십시오.

업데이트, 추가 생각 : 유효한 모든 HTML 파일은 완전하고 유효한 PHP 프로그램입니다. 예, 실제 PHP 코드 한 줄이 포함되어 있지 않더라도 가능합니다.

HTML에서 시작하여 단계별로 작은 PHP 조각을 추가하면 여기에서 논의 할 스타일로 끝날 수 있습니다. 리팩토링 이 게임에 등장하는 곳 : 모든 것이 예상대로 실행되면, 가능한 한 부분을 반복하지 않고 코드를 가능한 한 읽기 쉽고 유지 보수 및 확장 할 수있을 때까지 코드를 다시 작성하십시오.

어떤 사람들은이 마지막 단계 없이도 행복하다고 생각하기 때문에 이것이 곧 죽지 않을 것입니다.


위의 구문 강조 표시가 해당 주석에서 실제로 발생하는 것을 보여주지 않는 것이 유감입니다 ...
webaware

9
@webaware 나는 그것이 문제를 훨씬 더 설명한다고 생각합니다. :)
fuxia

True :) (및 일부 SE 문자 경찰을 유지하기 위해 일부 문자)
webaware

2
@AndyAdams Fair 충분히, 나는 그것을 rephrased했다. 이제 사악한 추천인이 되십시오. :)
fuxia

3
테마는이 스타일을 사용합니다. 그렇지 않으면 너무 못 생기 때문입니다. 테마를 리팩토링 할 때 코드를 가능한 한 읽기 쉽도록 다시 작성하는 것이 <? ... ?>좋습니다. 즉, echo / printf / var_dump를 사용하지 않고 중첩을 이해하기 쉽도록 각 제어 구조를 자체 쌍 안에 배치하지 않아야 합니다. OP의 예와 다르게 내가 할 한 가지는 the_post();자체 줄을 썼다 는 것 입니다.
Lie Ryan

12

PHP 주석에서 이것을 피하는 동안 템플릿 파일의 PHP 오프너 / 클로저입니다. 대안은 PHP 문자열을 통해 HTML을 에코하는 것과 관련이 있습니다. 기본 예 :

<!-- Example 1 -->
<ul>
    <?php
        foreach ( $list_items as $list_item ) {
            echo "<li><a href='" . $list_item->url . "'>" . $list_item->name . "</a></li>";
        }
    ?>
</ul>

<!-- Example 2 -->
<ul>
    <?php foreach ( $list_items as $list_item ) : ?>
        <li>
            <a href="<?php echo $list_item->url; ?>">
                <?php echo $list_item->name; ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>

예제 2가 더 장황합니까? 혹시? 그러나 내 의견으로는 읽기 쉽고 편집하기 쉽습니다. 복잡한 HTML에 얼마나 못생긴 지 상상할 수 있습니다.

또한, 단지 보조 노트로 : 사용 endforeach하고 endif당신의 PHP 로직 강화합니다 가독성 사이에 HTML을 작성하는 에 비해 }.


5
그러나 그 }이상의 장점은 endif(많은 편집자들이) 개구부 {가 어디에 있는지, 그리고 모든 것이 제대로 닫혔는지 쉽게 볼 수 있다는 것입니다. 와 그 파악하려고 endif... 그리고 조건문의 전체 무리를

2
foreach ( $list_items as $list_item ) printf( '<li><a href="%1$s">%2$s</a></li>', $list_item->url, $list_item->name );– HTML과 PHP는 줄로 분리되어 있습니다. : P
fuxia

4
@toscho : 당신은 요점을 완전히 놓쳤다. 여전히 PHP와 HTML을 혼합하고 있습니다. 두 번째 스타일을 선호하는 사람들은 PHP 문자열 안에 HTML을 사용하지 않기를 원하기 때문에 그렇게합니다. PHP를 템플릿 언어로 사용할 때 PHP를 HTML로 사용할 때 두 번째 스타일을 사용합니다 .PHP와 HTML을 혼합하여 중첩시키는 유일한 방법이기 때문에 PHP를 스크립팅 언어로 사용할 때 전자를 사용하는 것이 일반적입니다. 애플리케이션 로직을 템플릿과 분리 할 때 스크립트에서 두 번째 스타일은 짧은 태그를 사용할 수있는 경우 더 나은 것 : <? ... ?><?= ... ?>.
Lie Ryan

1
@Piet : 중괄호를 맞추는 데 문제가 있다면 들여 쓰기에 대해 들어 본 적이없는 것입니까? 또한 endif적절한 편집기에서 오프닝을 강조 표시하도록 구성 할 수 있어야합니다 .
Lie Ryan

4
@LieRyan
Rarst

10

이것은 다음과 같이 페이지를 보는 것 사이의 선택에 관한 것입니다.

  • 완전히 PHP로 생성 된 엔티티
  • PHP 템플릿 태그로 구동되는 HTML 문서 템플릿

다른 사람들은 그것에 대해 다르게 생각하는 경향이 있습니다. 함수는 순수한 PHP 블록처럼 느껴지기 때문에이 스타일을 거의 사용하지 않습니다. 반면에 템플릿에서 파일에 더 많이 퍼지고 순수 HTML의 양이 PHP의 것보다 쉽게 ​​많을 수 있기 때문에 템플릿에서 드문 일이 아닙니다.

템플릿 엔진 (Mustache, Twig 등)을 보면 구문이 일반 PHP의 자세한 정보를 제거하는 경향이 있다는 점을 제외 하고는이 스타일과 매우 유사합니다.

PS 나는에 대해 이야기하고 있습니다하려는 제정신 , HTML에서 PHP의 내장하지 문자 에 태그를 열고 끝나는 모든 단지를 위해 라인.


2

내 질문은 : 왜? 왜 이러한 모든 추가 태그를 포함합니까?

대답은 아주 간단합니다 : 관객. 프로그래머가 아닌 사람이 테마를 가져 오면 설치를 FTP로 작성하고 5 분 설정을 실행하는 등 이미 프로그래밍 한 느낌이 듭니다. 그런 다음 주제 에 상관없이 한 줄을 추가하거나 변경하려고 할 때 이미 HTML이 무엇인지 파악했을 수 있습니다. PHP는 여전히 접근 할 수 없습니다. 따라서 제 생각에는 실수를 할 때 요소를 손상시키지 않고 요소를 쉽게 추가하거나 제거 할 수 있다는 것입니다.

참고 : 이것은 내가 좋아하거나 선호하거나 권장하는 것이 아닙니다. 왜 이런 일이 발생하는지 생각합니다.


0

나는 새로운 프로그래머들이 이런 식으로 훈련받는 것을 발견했다. Lynda에서 40 시간 과정을 밟고 있으며 강사는 함수 정의를 제외하고 모든 줄에 PHP 태그를 삭제합니다. 아마도 HTML과 PHP 사이에 선을 분명히 그려서 새로운 사람들이 HTML이 끝나고 PHP가 시작되는 위치를 이해하는 데 도움이 될 것입니다. 그 후, 아마도 습관 일 것입니다. 나는 그것에 스스로 화가 나기 시작했고 다른 누군가가 불평하고 있는지 확인하기로 결정했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.