2011-08-26 5 views
2

조건이 충족 될 때 때로는 앵커 태그로 묶어야하는 HTML이 있습니다. 나는 이런 식으로 뭔가 할 수있는 :PHP : 문자열을 따옴표로 묶지 않고 인수로 전달하는 방법은 무엇입니까?

<?php 
    $html = '<div>my html</div>'; 
    if ($condition): 
?> 
    <a href="http://google.com"><?php echo $html ?></a> 
<?php else: ?> 
    <?php echo $html ?> 
<?php endif; ?> 

을 ...하지만 난 문자열로 돌려 따옴표 내 HTML을 포장하고 싶지 않아요. 이것은 두 가지 이유 때문입니다. 구문 강조 표시가 사라지고 유지 관리가 더 어려워집니다.

어떻게하면 다음과 같이 할 수 있습니까?

<!-- pseudo code --> 
<?php if ($condition): echo $this->wrapWithLinkTo('http://google.com', ?> 
    <div>my html</div> 
<?php); endif; ?> 

... 최종 결과가 될 수 있도록 :

<!-- when $condition is true --> 
<a href="http://google.com"><div>my html</div></a> 

<!-- when $condition is false --> 
<div>my html</div> 
+0

나는 따옴표를 제안한다. – cwallenpoole

+0

html을 별도의 .html 파일에 넣고/require/file_get_contents를 include하는 것보다는 짧게하는 것이 좋습니다. 따옴표를 사용해야합니다. –

답변

4

사용 Output buffering!

<?php ob_start(); ?> 
<div>my html</div> 
<?php 

$html = ob_get_clean(); 

if ($condition): 
?> 
    <a href="http://google.com"><?php echo $html ?></a> 
<?php else: ?> 
    <?php echo $html ?> 
<?php endif; ?> 

PHP의 출력 버퍼링 PHP 코드 출력, HTML 모드, 또는 아무것도를 캡처하고 다음 중 하나를 클라이언트 (ob_get_clean())에이를 출력 변수에 저장하지 변수로 저장하는 데 사용되며, 또한 클라이언트 (ob_get_flush())에게 보내거나 다른 것들을 전체적으로 수행하십시오! (ob_* functions)

+0

먼저 거기에 들어간 것처럼 보입니다 .- – DaveRandom

+0

물론 버퍼링이 가능합니다! 내가 그렇게 생각하지 않는다고 화나게했다. –

+0

나는 운이 좋았다 @Dave :-) 출력 버퍼링을 위해 – Josh

0

이 그것을 수행해야합니다

<?php if ($condition) : ?> 
    <a href="http://google.com"><div>my html</div></a> 
<?php else : ?> 
    <div>my html</div> 
<?php endif; ?> 
5

출력 버퍼링은 어떻습니까?

<?php ob_start(); ?> 
<div>my html</div> 
<?php 
    $html = ob_get_clean(); 
    echo ($condition) ? $this->wrapWithLinkTo('http://google.com',$html) : $html; 
?> 
+0

+1! – Josh

+1

[삼항 연산자] (http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary) 사용에 +1! – Andrew

+0

@Andrew Ternary는 PHP에서 가장 많이 사용되지 않는 기능 중 하나입니다. 아주 소수의 사람들 만이 그것에 대해 알지 못하는 것처럼 보이고 이와 같은 일을하기 위해 if/else 구조를 사용합니다. – DaveRandom

1

당신은 HEREDOC 구문을 사용할 수 있습니다. 그러나 여전히 구문 강조를 제거 할 수 있습니다.

$html = <<<END 
<div>my html</div> 
END; 
+0

좋은 아이디어! 그러나 구문 색으로 표시되는지는 알 수 없습니다. IDE에 따라 다름 ... – Josh

관련 문제