PHP 짧은 태그를 사용할 수 있습니까?


522

공식 문서에 따른 정보는 다음과 같습니다 .

PHP에서 사용할 수있는 4 가지 서로 다른 시작 및 종료 태그 쌍이 있습니다. 그 두 가지, <?php ?> 그리고 <script language="php"> </script>항상 사용할 수 있습니다. 다른 두 가지는 짧은 태그와 ASP 스타일 태그이며 php.ini 구성 파일에서 켜거나 끌 수 있습니다. 따라서 일부 사람들은 짧은 태그와 ASP 스타일 태그가 편리하다고 생각하지만 이식성이 떨어 지므로 일반적으로 권장하지 않습니다 .

내 경험에 의하면 대부분의 서버는 않는 짧은 태그를 사용할 수 있습니다. 타자

<?=

입력하는 것보다 훨씬 편리합니다

<?php echo 

프로그래머 편의성이 중요한 요소이므로 권장하지 않습니까?


61
why부분에 답하기 위해 Zend PHP 5 인증 가이드를 인용하겠습니다. "한동안 짧은 태그는 PHP 세계의 표준 이었지만 XML 헤더와 충돌하는 데 큰 단점이 있으므로 다소 길가에 떨어졌다. "
푹신한

7
이 문제가 발생하는 유스 케이스는 무엇입니까? 즉, 개발자가 PHP를 사용하여 XML을 생성하는 것이 고통 스럽습니까?
Jon z

9
공개하려는 XML 문서가 있지만 어떤 이유로 든 문서를 PHP로 구문 분석하여 브라우저에서 .xml을 구문 분석 할 수 있기를 원한다고 가정 해 봅시다. 짧은 태그를 사용하도록 설정하면 갑자기 XML 문서가 XML 헤더를 통해 구문 분석되어 문제가 발생합니다. 오래 전에 이것을 알아 내려고 노력했습니다. 짧은 코드가 아닌 짧은 코드에 의지 I가 실행되는 서버와 내가 갖고 함께 일 한 모든 팀 비활성화되었습니다 이래
thenetimp

43
PHP 5.4.0부터 short_open_tag 지시문은 짧은 에코 태그를 포함하지 않습니다 <?= $example;?> ! 다른 모든 짧은 태그의 사용은 쓸데없는 것으로 간주되므로 이것은 매우 중요합니다. 어쨌든 짧은 에코 태그를 사용하는 것이 좋습니다. 더 부드럽고 깔끔한 코드베이스-esp를 제공합니다. 보기 파일에서. 따라서 PHP> = 5.4.0의 경우 설정하지 않고<?= ?> 사용할 수 있습니다 . 코드에 다른 짧은 태그를 사용하지 마십시오. 당신이 그렇게했을 때 코드 신들은 매우 화를 short_open_tag
냅니다

6
긴 답변이 너무 많기 때문에 이것을 빠른 주석으로 추가하려고 합니다. 오프닝 선언을 위해 XML 에서만 사용되는 <?것은 아닙니다<?xml version="1.0" ?> . "명령 처리"의 일반적인 구문이며, 두 번째로 가장 일반적인 예는 <?xml-stylesheet ... ?>입니다. (5.4+에서 허용 된대로) <?php실제로 유효한 처리 명령으로 간주 될 수 <?=있지만 전체를 주장 <?하면 구문간에 불필요한 충돌이 발생합니다.
IMSoP

답변:


374

코드가 지원되지 않는 서버로 코드를 이동해야하는 경우 PITA이므로 사용하지 않는 것이 좋습니다 (사용할 수 없음). 당신이 말했듯이, 많은 공유 호스트 짧은 태그를 지원하지만 "lots"가 전부는 아닙니다. 스크립트를 공유하려면 전체 구문을 사용하는 것이 가장 좋습니다.

나는 동의 <?하고 <?=보다 프로그래머에 쉽게 <?php하고 <?php echo있지만 한 같은 형태로 각 시간을 사용 (공백 (예에서 척하지 않는 한 발견이 및 바꾸기 일괄 작업을 수행 할 수 있습니다 : <? php<? =)

나는 가독성을 전혀 사지 않습니다. 대부분의 심각한 개발자는 구문 강조 옵션을 사용할 수 있습니다.

주석에서 ThiefMaster가 언급했듯이 PHP 5.4 <?= ... ?>부터는 짧은 태그 설정에 관계없이 모든 곳에서 태그가 지원됩니다 . 이것은 이식 가능한 코드에서 사용하기에 안전하지만 PHP 5.4+에 대한 의존성이 있음을 의미합니다. 5.4 이전 버전을 지원하고 짧은 태그를 보장 할 수없는 경우 여전히을 사용해야 <?php echo ... ?>합니다.

또한 ASP 태그 <%, %>, <% = 및 스크립트 태그가 PHP 7에서 제거 되었음을 알아야합니다 . 따라서 장기 휴대용 코드를 지원하고 최신 도구로 전환하려면 해당 코드 부분을 변경하는 것이 좋습니다.


91
따라서 설명은 다음과 같습니다. 지원되지 않기 때문에 나쁩니 까? 그러나 왜 지원되지 않습니까? 그것들은 사양의 일부가 아니기 때문에? 그래, 왜 그들은 사양의 일부가 아닌가? 나는이 대답에 약간 실망했다.
Josef Sábl

61
나는 왜 우리가 왔는지, 어떻게 시작했는지 등의 "큰 질문"에 대해 논의하기 위해 여기에 있지 않습니다. 공유 서버에서 짧은 태그 지원은 보장되지 않으며 다음 주요 버전에서는 완전히 제거되고 있습니다. 그게 당신이 알아야 할 전부입니다.
Oli

39
필수 PHP 템플릿 엔진입니다. : P
구문 오류

49
짧은 태그가 단계적으로 종료되지 않습니다. ASP 스타일의 짧은 태그 만
Brian Lacy

46
PHP 5.4의 장래에 <? =의 사용은 short_open_tags의 활성화 여부와 분리됩니다. <? =는 단계적으로 폐지되지 않고 있으며, 그 반대는 현재 언어의 기본 부분으로 간주됩니다.
Mr Griever

175

나는 그것을 놓기가 너무 좋아 <?=$whatever?>. 문제가 없었습니다. 엉덩이에 물릴 때까지 기다립니다. 진지하게, (나의) 클라이언트 중 85 %가 드문 경우 지만 php.ini에 액세스 할 수 있습니다. 나머지 15 %는 주류 호스팅 제공 업체를 사용하며 사실상 모든 공급 업체가 사용하도록 설정했습니다. 나는 그들을 사랑합니다.


41
@B Seven 발생할 수있는 모든 이론적 문제를 피하려고하면 코드가 거의 비효율적이며 버그가 있습니다. PHP 그룹이 [ASP 태그가 아닌] 짧은 태그를 단계적으로 제거하는 데 동의 할 때까지, 물린 것에 대한 걱정은 시간을 "고정"하는 데 사용할 수있는 다른 것보다 훨씬 적고 잠재적 솔루션은 훨씬 간단합니다.
SamGoody

18
그것이 당신을 물면 더 나은 호스팅으로 이동
Lie Ryan

4
난 정말이 때문에 뭔가를 사용하지 않는 동의하지 않을 수도 지원되지. 서버에서 지원되지 않는 다른 기능을 사용하지 않아야합니까? MYSQL 대 MYSQLI? 더 좋은 호스트로 변경하는 데 약간의 시간을 할애하지 않기 위해 조금씩 시간을 조금씩 낭비하고 다시 긴 태그를 작성합니다.
Dean 또는

2
@BSeven, 기본 제공되는 것을 제외하고는 PHP 확장을 사용하지 않습니까?
Pacerier

143

PHP 5.4부터는 에코 바로 가기가 항상 활성화되므로 에코 바로 가기는 짧은 태그와는 별개의 문제입니다. 지금은 사실입니다.

따라서 에코 바로 가기 자체 ( <?=)는 이제 안전하게 사용할 수 있습니다.


19
이것이 유일한 "짧은 태그"라고 말하고 싶습니다. <?php모든 클래스 파일의 시작 부분에서 사용할 수 있으며 <?=뷰 를 가질 수 있습니다. 상생.
Xeoncross

6
So the echo shortcut itself (<?=) is safe to use... PHP 5.4가 필요한 한 편안합니다. 워드 프레스와 같이 광범위하게 배포 된 PHP 앱은 5.4를 요구하지 않으며 2011 년까지 PHP 4를 계속 지원합니다. PHP 5가 출시 된 후 7 년이되었습니다. 페이스 북과 같은 곳에서 소프트웨어의 모든 설치가 회사 자체에서 직접 운영되는 경우 워드 프레스와 같은 프로젝트를 수행하는 것보다 5.4 지원이 훨씬 더 쉽습니다.
Frank Farmer

@dukeofgaming, Wow good catch는 웹에서 SVN 개정판에 액세스 할 수 있다는 것을 몰랐습니다.
Pacerier

82

이 전체 토론의 문제는 PHP를 템플릿 언어로 사용하는 데 있습니다. 아무도 애플리케이션 소스 파일에서 태그를 사용해야한다고 주장하지 않습니다.

그러나 PHP의 내장 구문을 사용하면 강력한 템플릿 언어로 사용할 수 있으며 템플릿은 가능한 한 단순하고 읽을 수 있어야합니다. 많은 사람들이 Smarty와 같이 훨씬 느리고 부가적인 템플릿 엔진을 사용하는 것이 더 쉽다는 것을 알았지 만 빠른 렌더링과 순수한 코드 기반을 요구하는 순수 퓨어리스트에게는 PHP가 템플릿을 작성하는 유일한 방법입니다.

짧은 태그 사용에 대한 유일한 유효한 인수는 모든 서버에서 지원되지 않는다는 것입니다. 어쨌든 PHP와 XML을 혼용해서는 안되기 때문에 XML 문서와의 충돌에 대한 의견은 터무니 없다. 그리고 있다면 PHP를 사용하여 텍스트 문자열을 출력해야합니다. 템플릿 파일 내에 데이터베이스 액세스 자격 증명과 같은 중요한 정보를 넣는 경우 더 큰 문제가 발생하므로 보안은 결코 문제가되지 않습니다.

이제 서버 지원 문제와 관련하여 대상 플랫폼을 알고 있어야합니다. 공유 호스팅이 가능한 경우 짧은 태그를 피해야합니다. 그러나 많은 전문 개발자 (나 자신과 같은)의 경우 고객은 서버 요구 사항을 지시 할 것임을 인정합니다. 종종 서버를 직접 설정해야합니다.

또한 서버 구성을 완벽하게 제어 할 수없는 호스팅 제공 업체와는 절대로 협력하지 않습니다. 이러한 경우 짧은 태그 지원을 잃는 것보다 훨씬 더 많은 문제에 부딪 칠 수 있습니다. 그것은 일어나지 않습니다.

그렇습니다. 저는 짧은 태그 사용을 신중하게 고려해야한다는 데 동의합니다. 그러나 나는 그것이 항상 옵션이되어야한다고 믿고 있으며, 자신의 환경을 알고있는 개발자는 자유롭게 사용할 수 있다고 생각합니다.


6
어떤 이유로 아파치가 .xml 파일을 mod_php에 전달하도록 설정했다면 <? xml은 짧은 태그가있는 두통이 될 것입니다. 그러나 그것은 분명 기괴한 설정입니다.
Frank Farmer

3
템플릿 출력 문서의 일부 유형의 해결없이 포함 할 수없는 언어는 큰 실패이다. PHP 코드와 짧은 태그가있는 XML 템플릿이 없어야하는 유일한 이유는 그것이 이해가되지 않기 때문에 작동하지 않기 때문입니다.
Vinko Vrsalovic

8
빠르고 편리한 템플릿 언어로 PHP의 이점을 활용하는 것은 "큰 실패"가 아닙니다. 앞에서 말했듯이, 이점과 단점을 평가하고 선택한 접근 방식을 수용하는 방식으로 코드를 작성하는 것이 중요합니다. 하나의 특정 시나리오 (쉽게 해결할 수있는)에서는 작동하지 않기 때문에 유효한 접근 방식을 범주별로 무시하지 마십시오.
Brian Lacy

5
나는 유효한 접근법을 범주 적으로 무시하지 않고있다. 또한 내가 언급 한 큰 실패 <?는 짧은 태그 로 사용하기 로 결정한 것이 XML에 대한 추악한 해결 방법으로 이어지기 때문입니다. 즉, 그것은 혜택과 단점을 계량하는 문제이며, 당신이하는 일을 알고 있다면 확실히 할 수 있다는 데 동의합니다. 그러나 이것은 <?좋은 선택 이 아닙니다 .
Vinko Vrsalovic

3
나는 파티에 조금 늦었지만이 답변을 정말로 좋아하며 상황에 대한 나의 경험을 반영합니다. 우리 사무실 에서이 문제에 대해 약간의 의견 차이가 있지만, 수년간 PHP에서 거의 매일 작업 하면서이 문제가 결코 발생하지 않았다고 말할 수 있습니다. PHP를 사용하여 XML을 생성 할 때 필자의 경험에 따르면 항상 동적 콘텐츠의 맥락에서 PHP를 통해 직접 템플릿을 작성하지 않았기 때문에 문제가 발생하지 않습니다.
redreinard

33

Zend Framework 덕분에 기본 MVC 구성 에서 " PHP를 템플릿 언어로 " 푸시하는 짧은 태그가 다시 제공 됩니다 . 토론 내용에 대해 잘 모르겠습니다. 평생 동안 생산할 소프트웨어의 대부분은 귀하 또는 회사가 제어하는 ​​서버에서 작동합니다. 일관성을 유지하는 한 아무런 문제가 없어야합니다.

최신 정보

긴 형태를 사용하는 Magento로 꽤 많은 작업을 한 후 . 결과적으로 다음과 같은 긴 형식으로 전환했습니다.

<?php and <?php echo

위에

<? and <?=

상호 운용성을 보장하는 소량의 작업 인 것 같습니다.


8
나는 프리랜서이며 모든 코드는 공유 호스팅으로 이동하므로 전혀 제어 할 수 없습니다! :)
MDCore

12
충분한 클라이언트가 자신의 coloc으로 이동하면 공유 호스팅이 안전하지 않고 불안정합니다.
Jake McGraw

2
Zend가 긴 버전을 사용함에 따라 Zend가 다시 가져 오는 짧은 태그는 분명히 잡히지 않았습니다. framework.zend.com/manual/en/zend.view.scripts.html
Gerry

3
@Gerry 최근에이 글을 읽었습니다.이 글타래에 대한 마지막 코멘트를 참조하십시오 : .htaccess를 업데이트하여 짧은 열린 태그를 사용하도록 설정
MrWhite

2
UPDATE 후 첫 문장에서 문법을 실제로 수정해야합니다. 현재 형식에서는 의미가 없습니다.
redreinard

22

혼란 때문에 XML 선언으로 생성 할 수 있습니다. 많은 사람들 당신의 의견에 동의합니다 .

추가 관심사는 최종 호스팅 서버가 꺼져 있다는 것을 알기 위해 짧은 태그로 모든 것을 코딩하기 위해 생성되는 고통입니다 ...


short_tags가 켜져 있으면 XML 선언으로 인해 혼란이 발생하지 않습니까?
MDCore

따라서 XML 선언을 직접 출력하는 대신 PHP에서 선언합니다. 정말 좋은 반박이 아닙니다.
moo

아무것도 거부하지 않습니다. 그것은 실제로 "호스트가 그것을 끈다"는 다른 이유의 원인 인 유일한 실제 이유입니다.
Vinko Vrsalovic

1
@ macek : 알고 있습니다. 내가 생각한 첫 번째 예일뿐입니다. XML 파일에 PHP를 포함 시키면 어떻게 될까요? 직접 할 수는 없습니다. 그리고 그 문제에 대한 해결책도 알려주지 마십시오. 요점은 PHP가 XML 파일을 구문 분석하는 방법이 많이 있다는 것입니다. 해결 방법 ( <?='<?xml')을 사용하거나 "그렇게하지 말아야합니다"라고 말하면 모두 사라질 수 있지만 실제로는 사라질 수는 없습니다.
Vinko Vrsalovic

1
짧은 태그가 작동하지 않으면 어떻게 고통 스럽습니까? 그 벌크을 할 수 있으며 장착하는 데 매우 쉽습니다 <?=와 함께 <? echo . 많은 텍스트 편집기가 한 번에 수천 개의 파일에이 작업을 쉽게 처리 할 수 ​​있습니다.
야 미코

20

다음은 동일한 훌륭한 흐름도입니다.

<? =의 의사 결정 트리

출처 : Software Engineering Stack Exchange에 대한 비슷한 질문


2
이것은 <?질문에 언급 된 짧은 태그 와 동일하지 않은 짧은 에코 태그의 사용 여부를 설명합니다 (5.4 이전의 동일한 구성 설정을 사용했지만)
Alok

사실 이것은 많은 사람들이 짧은 태그를 사용하고 싶지 않은 이유 (예 : 공유 호스팅 시스템에서 php.ini 파일을 변경할 수 없음)가 실제로 설명되어 있지는 않지만 모든 사람이 이해할 수있는 대답이어야합니다.
Björn K

14

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php 는 다음을 포함하여 많은 조언을합니다 :

일부 사람들은 짧은 태그와 ASP 스타일 태그가 편리하다고 생각하지만 이식성이 떨어 지므로 일반적으로 권장하지 않습니다.

XML 또는 XHTML 내에 PHP를 포함하는 경우 <?php ?>표준을 준수 하려면 태그를 사용해야합니다 .

대상 서버에서는 짧은 태그가 지원되지 않을 수 있으므로 사용자가 제어 할 수없는 PHP 서버에서 재배포 또는 배포를위한 응용 프로그램이나 라이브러리를 개발할 때는 짧은 태그를 사용하지 않아야합니다. 재배포 가능한 이식 가능한 코드의 경우 짧은 태그를 사용하지 마십시오.


14

누구든지 여전히 이것에주의를 기울이고있는 경우 ... PHP 5.4.0부터 알파 1 <?=은 항상 사용할 수 있습니다 :

http://php.net/releases/NEWS_5_4_0_alpha1.txt

따라서 짧은 태그가 (a) 수용 가능하고 (b) 여기에있는 것처럼 보입니다. 적어도 지금은 ...


5
<?=5.4 기준으로 짧은 태그로 간주되지 않습니다
T0xicCode

12
  • 일부 웹 서버 (공유 호스트 등)에서는 짧은 태그가 기본적으로 켜져 있지 않으므로 이러한 태그 중 하나로 이동해야하는 경우 코드 이식성 이 문제가됩니다.

  • 가독성 은 일부 사람들에게 문제가 될 수 있습니다. 많은 개발자들은 파일을 스캔 할 <?php때보 <?다, 특히 HTML 과 PHP가 긴밀하게 짜여진 코드베이스에 갇혀있을 때보 다 코드 블록의 시작 부분을보다 분명하게 인식 할 수 있다는 것을 알 수 있습니다 .


2
웹 서버의 95 %에서 짧은 태그를 사용할 수 있습니다.
Paolo Bergantino

19
나는 "가독성"주장을 사지 않습니다. 템플릿 언어로 PHP를 사용하는 경우 <?= $var ?>보다 읽기 <?php echo $var ?>
Frank Farmer

2
@Paulo 이것은 08 년 이후로 변경되었을 수 있지만 yum 설치 및 apt-get 버전의 PHP를 사용하는 EC2 Ubuntu 및 Fedora 인스턴스는 기본적으로 짧은 태그 지정이 비활성화되어 있습니다.
Doug Molineux

2
전체 태그를 사용하면 100 % :)
Elvis Ciotti

1
@ FrankFarmer, 나는 에코가없는 것을 비교하고 있다고 생각합니다. <?<?php.
Pacerier

11

참고 : PHP 5.4부터는 짧은 태그 인을 <?=항상 사용할 수 있습니다.


5

주제에 대한 정보를 찾은 후이 페이지를 읽었으며 게으름 대 일관성이라는 한 가지 중요한 문제는 언급되지 않았다고 생각합니다. PHP의 "실제"태그는 <? php 및?>입니다. 왜? 난 정말 상관 없어 PHP 용으로 명확 할 때 왜 다른 것을 사용하고 싶습니까? <% and %>는 나에게 ASP를, <script .....는 Javascript (대부분의 경우)를 의미합니다. 일관성, 빠른 학습, 이식성 및 단순성을 위해 표준을 고수하지 않는 이유는 무엇입니까?

반면에 템플릿의 짧은 태그 (및 템플릿의 경우에만)가 유용하게 보이지만 여기서 문제에 대해 너무 많은 시간을 보냈으므로 실제로 낭비하는 데 시간이 오래 걸릴 수 있다는 문제가 있습니다. "php"의 여분의 세 문자를 입력하는 많은 시간 !!

많은 옵션을 갖는 것이 좋지만 전혀 논리적이지 않으며 문제를 일으킬 수 있습니다. 모든 프로그래밍 언어에서 4 가지 이상의 태그 유형을 허용한다고 가정 해보십시오. Javascript는 <JS 또는 <script .... 또는 <% 또는 <? JS .... 도움이 될까요? PHP의 경우, 파싱 순서는 이러한 것들을 허용하는 경향이 있지만, 언어는 유연성이없는 다른 많은 방식으로되어 있습니다. 언어가 약간의 불일치에 대해 통지 나 오류를 던지지 만 짧은 태그가 자주 사용됩니다. 또한 지원하지 않는 서버에서 짧은 태그를 사용하는 경우 오류가 발생하지 않으므로 무엇이 잘못되었는지 파악하는 데 시간이 오래 걸릴 수 있습니다.

마지막으로 짧은 태그가 문제라고 생각하지 않습니다. 1) 일반 PHP 코드, 2) 템플릿 에코라는 두 가지 논리적 유형의 PHP 코드 블록 만 있습니다. 전자의 경우 모든 것을 일관성 있고 이식 가능하게 유지하기 위해 <? php and?> 만 허용해야한다고 확신합니다. 후자의 경우 <? = $ var?> 방법은 추악합니다. 왜 이런 식이어야합니까? 더 논리적 인 것을 추가하지 않겠습니까? <? php $ var?> 그것은 아무것도하지 않을 것이며 (가장 먼 가능성에서만 무언가와 충돌 할 수 있습니다), 어색한 <? = 문법을 쉽게 대체 할 수 있습니다. 또는 이것이 문제라면, 대신 <? php = $ var?>를 사용할 수 있으며 불일치에 대해 걱정하지 않아도됩니다.

열기 및 닫기 태그에 대한 4 가지 옵션과 특별한 "echo"태그의 무작위 추가가있는 시점에서 PHP는 php.ini 또는 .htaccess에 "custom open / close tags"플래그를 가질 수 있습니다. 그렇게하면 디자이너가 가장 좋아하는 것을 선택할 수 있습니다. 그러나 명백한 이유 때문에 그것은 과잉입니다. 그렇다면 왜 4 가지 이상의 옵션을 허용해야합니까?


4

별도의보기 파일이있는 MVC 프레임 워크 또는 CMS로 작업 할 때 사용하는 것이 좋습니다.
빠르며 코드가 적으며 디자이너에게는 혼란스럽지 않습니다. 서버 구성에서 사용할 수 있는지 확인하십시오.


4

약간 다른 상황은 CodeIgniter 애플리케이션을 개발할 때 입니다. CodeIgniter는 PHP가 템플릿 / 뷰에서 사용될 때마다 짧은 태그를 사용하는 것 같습니다. 그렇지 않으면 모델과 컨트롤러에서는 항상 긴 태그를 사용합니다. 프레임 워크에서는 어렵고 빠른 규칙은 아니지만 대부분 다른 용도의 프레임 워크와 소스는이 규칙을 따릅니다.

내 두 센트? 다른 곳에서 코드를 실행할 계획이 없다면 원하는 경우 사용하십시오. 나는 그것이 멍청한 아이디어라는 것을 깨달았을 때 대량 검색을하고 교체 할 필요가 없습니다.



3

짧은 태그를 사용하는 IMHO 사람들은 종종 반향을 피하는 것을 잊어 버립니다. 기본적으로 이스케이프되는 템플릿 엔진이 있으면 좋을 것입니다. Rob A가 Zend Frameworks 앱에서 짧은 태그를 피하기 위해 빠른 해킹을했다고 생각합니다. 짧은 태그를 좋아한다면 PHP를 더 쉽게 읽을 수 있습니다. 그렇다면 Smarty가 더 나은 옵션일까요?

{$myString|escape}

나보다 나아 보인다

<?= htmlspecialchars($myString) ?> 

10
대부분의 PHP 프로그래머에게는 두 번째 옵션이 첫 번째 옵션보다 더 의미가 있습니다. 단순히 우리가 잘 알고있는 실제 PHP 함수이기 때문입니다. 첫 번째 옵션은 PHP 위에서 배우는 의사 템플릿 코드입니다. PHP는 이미 템플릿 언어이며 Smarty가 중복 IMO처럼 다른 템플릿 언어를 추가합니다.
버그 자석

3
나뭇 가지가 기본적으로 사용 이스케이프 HTML과 템플릿 엔진이다 twig.sensiolabs.org
mateusza

3

짧은 태그를 사용하는 요점이 무엇인지 물어봐야합니다.

더 빠른 타이핑

MDCore는 말했다 :

<?= 입력하는 것보다 훨씬 편리합니다 <?php echo

그렇습니다. 스크립트 전체에서 7 자 * X 번을 입력하지 않아도됩니다.

그러나 스크립트가 디자인, 개발 및 작성하는 데 1 시간 또는 10 시간 이상이 걸리는 경우 스크립트 기간 동안이 7 개의 문자를 여기에 입력하지 않는 몇 초가 얼마나 관련성이 있습니까?

짧은 태그가 설정되어 있지 않거나 켜져 있지만 업데이트 또는 ini 파일 / 서버 구성을 변경하는 사람이 다른 잠재적 인 스크립트를 중지하면 일부 또는 전체 스크립트의 작동 가능성과 비교할 수 있습니다.

당신이 얻는 작은 혜택은 잠재적 인 문제의 심각성을 능가하는 것, 즉 귀하의 사이트가 작동하지 않거나 악화되어 사이트의 일부만 작동하지 않아서 해결해야 할 두통에 가깝습니다.

더 읽기 쉽다

이것은 친숙함에 달려 있습니다 .
나는 항상보고 사용했다 <?php echo. 따라서 <?=읽기는 어렵지만 익숙 하지 않으므로 읽기가 쉽지 않습니다 .

프론트 엔드 / 백엔드 개발자 분할 (대부분의 회사와 마찬가지로)에서 해당 템플릿을 작업하는 프론트 엔드 개발자 는 "PHP 오픈 태그 및 에코"와 같은 것을 보다 알고 <?=있습니까?
나는 가장 논리적 인 편이 편할 것입니다. 즉, 명확한 PHP 오픈 태그와 "echo"-무슨 일이 일어나고 있는지 <?php echo입니다.

위험 평가
문제 = 전체 사이트 또는 핵심 스크립트가 작동하지 않습니다.

문제의 가능성이 매우 낮음 + 결과의 심각도가 매우 높음 = 위험이 높음

결론

여기에 몇 초를 저장하면 몇 글자를 입력 할 필요는 없지만 많은 위험을 감수하고 결과적으로 가독성이 떨어질 수 있습니다.

전면 또는 백 엔드 코더 익숙한 와 함께 <?=가능성이 이해하기있는 <?php echo표준 -, 그들이있는 거 표준 PHP 것들로 <?php"에코"알려진 아주 잘 개방 태그와.
(프론트 엔드 코더조차도 "에코"를 알아야합니다. 그렇지 않으면 프레임 워크에서 제공하는 코드를 작성하지 않을 것입니다).

그 반대의 경우는 아니지만, PHP 숏 태그의 등호가 "에코"라고 논리적으로 추론하지는 않습니다.


타이핑과는 아무런 관련이 없습니다. 짧아서 읽기 쉬워 질 가능성이 있습니다 . 읽기에 사용되는 사람이 <?=읽을 수 <?=읽기에 사용하는 사람보다 더 쉽게 <?php echo읽기 <?php echo.
Pacerier

@Pacerier Shorter는 단순히 읽기가 쉽지 않습니다. 우리는 모두 다릅니다. 당신이 의미하는 바는 읽기 쉽다는 입니다. 내가 사용 해요으로 나는, 내 대답에 넣어 <?php코드 전반에 걸쳐 여러 번보다 나에게 더 잘 알고 있다고 보는 <?=익숙한 것들을 쉽게 - - 상점하지 반드시 더 나은.
제임스

아니, 난 당신을 비교하고 있지 않다 날, 나는 독서에 사용하는 사람이 말하고 <?=읽을 <?=더 읽기에 사용하는 사람에 비해 <?php echo읽기 <?php echo. 우리는 사람 X의 두개의 동일한 복사본을 가지고, 하나는 읽기에 사용된다 만 양태들을 변경하는 경우 즉, <?=판독에 사용되는 다른 쪽과 <?php echo, 제 복사본의 가독성 값을 달성 할 수있는 x자신의 원하는 구문을 사용하여 판독하면서 두 번째 사본은 y원하는 구문을 읽을 때의 가독성 값을 얻을 수 있습니다 x >= y.
Pacerier

아니요 요점을 놓치고 있습니다. 나는 특정 사람과 아무런 관련이없는 시스템의 잠재력을 언급하고 있습니다. qwerty 키보드로 입력하는 데 익숙한 사람들은 qwerty로 더 빨리 입력하는 반면 dvorak로 입력하는 데 익숙한 사람들은 dvorak로 더 빠르게 입력 할 수 있지만 실제로 두 시스템의 잠재력이 다르다는 사실은 바뀌지 않습니다.
Pacerier

3

현실을 직시하자. 짧은 태그가 없으면 PHP는 못 생겼습니다.

당신이 .htaccess얻을 수없는 경우 파일 에서 그들을 활성화 할 수 있습니다 php.ini:

php_flag short_open_tag on

3
그릇된. 때로는 서버가 모든 종류의 재정의를 거부하도록 설정되어 있습니다.
Alfabravo

17
사실, 호스트가 htaccess로 재정의를 허용하지 않으면 실제로 새로운 호스트가 필요합니다! :)
Brian Lacy

1
명령 행 인터페이스에서 작동하지 않으며 php_flag가 항상 지원되지 않습니다
Elvis Ciotti

3

이식성 문제를 피하려면 PHP 태그를 시작 <?php하십시오. PHP 파일이 HTML이 아닌 순수 PHP 인 경우 닫는 태그를 사용할 필요가 없습니다.


2
  • 서버가이를 지원하고 개발자가이를 이해한다고 확신 할 경우 짧은 태그를 사용할 수 있습니다.
  • 많은 서버가이 서버를 지원하지 않으며 많은 개발자가 한 번 본 후에 이해합니다.
  • 나는 그것이 그렇게 나쁘지 않기 때문에 이식성을 보장하기 위해 전체 태그를 사용합니다.

그렇게 말하면서 내 친구는 php.ini에서 asp_tags라는 설정 대신 에 대체 표준 asp 스타일 태그 를 지원하기 위해 이것을 말했다 . 그의 추론은 다음과 같습니다.<%<?

... 임의의 규칙이 표준화되어야합니다 . 즉, 프로그래밍 언어가 스스로를 구분하기 위해 사용해야하는 이상한 구두점과 같이 모두 동일한 가치를 갖는 일련의 가능성에 직면 할 때마다 하나의 표준 방법을 선택하고 고수해야합니다. 그렇게하면 모든 언어의 학습 곡선 (또는 협약과 관련된 모든 것)을 줄일 수 있습니다.

나에게는 잘 들리지만, 우리 중 누구도이 원인 주위에 마차를 돌 수 있다고 생각하지 않습니다. 그 동안 나는 전체에 충실 할 것 <?php입니다.


2

PHP 7에서 언급 할 가치가 있다고 생각했습니다.

  • 짧은 ASP PHP 태그 <% … %>가 사라졌습니다
  • true로 설정된 <? … ?>경우 짧은 PHP 탭 을 계속 사용할 수 있습니다 short_open_tag. 이것이 기본값입니다.
  • PHP 5.4부터 Short Print 태그 <?=… ?>는 설정에 관계없이 항상 활성화 short_open_tag됩니다.

다른 언어를 방해하여 첫 번째 언어를 잘 이해했습니다.

개인 취향 외에는 짧은 인쇄 태그를 사용하지 않을 이유가 없습니다.

물론, PHP 5의 레거시 버전과 호환되는 코드를 작성하는 경우 이전 규칙을 준수해야하지만 PHP 5.6 이전의 항목은 현재 지원되지 않습니다.

참조 : https://secure.php.net/manual/en/language.basic-syntax.phptags.php


1
내가 착각하지 않는 한, 첫 번째 요점이 잘못되었습니다. 이 문서에 따르면 짧은 PHP 태그가 아닌 ASP 태그는 PHP 7.0.0부터 사라졌습니다.
개정

@reformed 당신은 절대적으로 맞습니다. 답변을 편집하겠습니다. 감사합니다
Manngo

1

XSS에 관심이 있다면 <?= htmlspecialchars(…) ?>대부분의 시간을 사용해야 하므로 짧은 태그는 큰 차이가 없습니다.

당신이 단축 되더라도 echo htmlspecialchars()h(), 당신이 추가하는 것을 기억해야하는 문제는 거의 모든 시간 (무해 이스케이프 -하지만-이다 이스케이프 사전 데이터 트랙을 유지하려고하는 것은 단지 실수 가능성이 있습니다) 아직.

기본적으로 안전하고 태그를 작성 하는 템플릿 엔진 을 사용 합니다<?php .


7
"<? php echo htmlspecialchars ($ text, ENT_QUOTES, 'UTF-8');?> 하루에 500 번 입력하면 Rails와 같이"h "라는 바로 가기 기능을 만들 수 있습니다 .."< ? = h ($ text)?> "는 템플릿을 스캔 할 때 훨씬 더 읽기
쉽습니다

1
실제로 더 낫지 만 템플릿 엔진을 사용하면 $ {text} 또는 그와 같을 수 있습니다 (그리고 h ()를 추가 할 필요가 없습니다)
Kornel

7
PHP 자체는 템플릿 엔진입니다. 짧은 태그 사용을 중지하면 너무 장황 해져서 템플릿 엔진이 잘못되기 시작합니다.
Josef Sábl

1
@Alexander Malfait 그것은 좋은 팁입니다. 그러나 <? =는 필요하지 않습니다. 함수를 반환하는 대신 문자열을 반향시킬 수 있으므로 <? php h ( 'hello')?>를 작성할 것입니다. <? php _e ( '')?>는 그렇게 나쁘지 않습니다.
VladFr

1

<?php ?>이 프로그래밍 언어의 개발자가 핵심 언어를 크게 업데이트했기 때문에 사용하는 것이 훨씬 좋습니다. 짧은 태그와 긴 태그의 차이점을 확인할 수 있습니다.

짧은 태그는 밝은 빨강으로 강조 표시되고 긴 태그는 어둡게 강조 표시됩니다!

그러나 예를 들어 무언가를 반향하는 것이 <?=$variable;?>좋습니다. 그러나 더 긴 태그를 선호하십시오.<?php echo $variable;?>


1

<?후행 공백없이 다음을 후행 공백으로 변환하십시오 <?php.

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\?(?!php|=|xml|mso| )/<\?php /g'

<?후행 공백으로)를 <?php(후행 공백으로 유지 )로 변환하십시오 .

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\? /<\?php /g'

1

PHP에서는 짧은 태그를 항상 사용할 수 있습니다. 따라서 스크립트의 첫 번째 문장을 에코 할 필요가 없습니다

예:

    $a =10;
    <?= $a;//10 
    echo "Hellow";//
    echo "Hellow";

   ?>

갑자기 당신은 하나의 PHP 스크립트를 사용해야합니다 그리고 당신은 그것을 사용할 수 있습니다. 예:

<html>
<head>
<title></title>
</head>  
<body>
<p>hellow everybody<?= hi;?></p>
<p>hellow everybody  </p> 
<p>hellow everybody  </p>   
</body>
</html>

1

2019 년 현재 특정 답변에 동의하지 않습니다. 긴 태그 를 사용하는 것이 좋습니다

<?php /* code goes here */ ?>

또는 짧은 에코 태그

<?= /* code goes here */ ?>

이유 : PSR-1 기본 코딩 표준에서 권장합니다.

같은 다른 짧은 태그 <? /* code goes here */ ?>는 권장하지 않습니다.

사양은 말합니다 :

PHP 코드는 반드시 long 태그 또는 short-echo 태그를 사용해야합니다. 다른 태그 변형을 사용해서는 안됩니다 .


1

PHP에서 3 개의 태그를 사용할 수 있습니다 :

  1. <?php ?>구성된 태그를 지정할 필요 가 없는 긴 형식의 태그
  2. short_open_tag이 <? ?> 는 php.ini에서 short_open_tag 옵션을 사용할 수의 경우
  3. <?= PHP 5.4.0부터 태그 단축

PHP 7.0.0에서 ASP와 스크립트 태그가 제거되었습니다.


그것은 질문에 대답하지 않습니다.
RalfFriedl

-5

아니요, PHP 6에서 단계적으로 폐지 되었으므로 코드 수명을 높이 평가하려면 코드 나 <% ... %>태그를 사용하지 마십시오 .


4
더 이상 사용되지 않을 것이라고 말하는 다른 블로그 게시물, ASP 스타일의 짧은 태그 만 보았습니다.
MDCore

22
PHP 개발자 회의의 다음 링크에 따르면이 답변이 잘못된 것 같습니다 : php.net/~derick/…
Charles

7
왜 그렇게 나쁘지, 왜? 모두 자신이 너무 자신이 자신이 어리 석다는 것을 확신하지만 아무도 이유를 말하지 않습니다.
Josef Sábl

6
그릇된. 실제로 <% %> 태그를 단계적으로 폐지하고 있습니다. 혼동하는 것 외에는 다른 목적이 없습니다. <? ?> 태그는 영향을받지 않습니다. 물론 서버별로 구성 할 수 있으므로 항상 대상 플랫폼의 요구 사항을 알고 있어야합니다.
Brian Lacy

6
이 정보는 부정확하고 오해의 소지가있는 것으로 보이며 저자가 수정해야합니다.
tex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.