채택완료

<?php 질문 드리겠읍니다

안녕하세요 선배님들

Copy
<?php

    if(!$userid) {

?>                

                <span><a href="form.php">회원가입</a> </span>

                <span> | </span>

                <span><a href="login_form.php">로그인</a></span>

<?php

    } else {

                $logged = $username."(".$userid.")";

?>

                <span><?=$logged?> </span>

                <span> | </span>

                <span><a href="logout.php">로그아웃</a> </span>

                <span> | </span>

                <span><a href="modify_form.php">정보수정</a></span>

<?php

    }

?>

제 질문은 두가지입니다.

1. <?php  ?>구문을 왜 저렇게 나눈건지 궁금합니다.<?php 열고 닫는 부분이 왜 if 함수 중괄호 다음에 오나요?

2.if문의 중괄호의 위치도 왜 저런지 궁금합니다. 

답변 6개 / 댓글 6개

채택된 답변
+20 포인트

html 표현에 대한 유지보수를 유연하게 하기 위해서 입니다.

개발자가 직접 html 을 만지지 않고 디자이너나 퍼블리셔에게 전달받아 작업한다고 하면

Copy
<?php
    if(!$userid) {
        echo '<span><a href="form.php">회원가입</a> </span>';
        echo '<span> | </span>';
        echo '<span><a href="login_form.php">로그인</a></span>';
    } else {
        $logged = $username."(".$userid.")";
        echo '<span>' . $logged . ' </span>';
        echo '<span> | </span>';
        echo '<span><a href="logout.php">로그아웃</a> </span>';
        echo '<span> | </span>';
        echo '<span><a href="modify_form.php">정보수정</a></span>';
    }
?>

또는

Copy
<?php
    $outs = '';

    if(!$userid) {
        $outs .= '<span><a href="form.php">회원가입</a> </span>';
        $outs .= '<span> | </span>';
        $outs .= '<span><a href="login_form.php">로그인</a></span>';
    } else {
        $logged = $username."(".$userid.")";
        $outs .= '<span>' . $logged . ' </span>';
        $outs .= '<span> | </span>';
        $outs .= '<span><a href="logout.php">로그아웃</a> </span>';
        $outs .= '<span> | </span>';
        $outs .= '<span><a href="modify_form.php">정보수정</a></span>';
    }

    echo $outs;
?>

이런 방식일 경우 프론트단 수정이 일어나게 되면 손이 그만큼 많이 갑니다.

추가로 히어닥이라는 문법도 있으니 필요할때 사용하면 유용합니다.

https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

Copy
<?php
    $outs = <<<HEREDOC
    <span><a href="form.php">회원가입</a> </span>
    <span> | </span>
    <span><a href="login_form.php">로그인</a></span>
    HEREDOC;

    echo $outs;
?>

답변에 대한 댓글 1개

답변감사합니다ㅠㅠ잘배웠읍니다!!

답변에 대한 댓글 1개

답변 감사합니다!!!댓글이 안써져서 늦었네요

설명은 다른 분들이 잘 해주셨고,

코드 가독성 위해 이런 방식 선호합니다.

Copy
<?php if(!$userid) {?>                
    <span><a href="form.php">회원가입</a> </span>
    <span> | </span>
    <span><a href="login_form.php">로그인</a></span>
<?php } else { ?>
    <span><?php echo $username."(".$userid.")";?> </span>
    <span> | </span>
    <span><a href="logout.php">로그아웃</a> </span>
    <span> | </span>
    <span><a href="modify_form.php">정보수정</a></span>
<?php } ?>

답변에 대한 댓글 1개

답변 감사합니다!!!댓글이 안써져서 늦었네요ㅠㅠ

php문과 HTML 구문을 구분하기 위해서입니다.
JSP랑 굉장히 유사한 구조에요.

다만 코드의 가독성이 떨어지기는 합니다.

답변에 대한 댓글 1개

답변 감사합니다!!!댓글이 안써져서 늦었네요ㅠㅠ

웹개발언어의 구조적인 차이를 이해하셔야 합니다.

서버사이드 스크립트와 (php / jsp / python 등등)

클라이언트사이드 스크립트(html / css / javascript)

의 처리시점이 다릅니다.

Copy
<?php 

// php로직

if (true) {

?>

<html>.............

<table>

<?php

  } else {

?>

<html>

<?php 

  } 

?>

 

// 인경우에

 

<?php 로 시작해서 ?>

로 종료되는 지점은 PHP코드 서버에서 실행되는 내용 이고

?> 밖의 내용은 웹브라우저에서 실행되는 사항입니다.

위의 내용의 차이로 인해서 나오는 구조적인 모양이고

실제 처리는 다르게 작동하니..

<?php

?>

를 다 합쳐서 로직을 판단하시면됩니다.

답변에 대한 댓글 1개

답변 감사합니다!!!댓글이 안써져서 늦었네요ㅠㅠ

단순하게? php 문 안에 html 태그를 넣지 못하니 열고 닫고 구분지어서 하는거 아닐가요?

php문 안에 html도 같이 넣어 하려면 코딩방식도 바꾸고 해야 해서 그런거 아닌가요

번외로 그누 게시판 어디서 본거같은데  순수 php 만으로 된 소스는 

?>  마지막 닫히는 부분은 생략 가능한걸로 알고 있습니다.

답변에 대한 댓글 1개

답변감사합니다!!!!댓글이 안써져서 늦었네요ㅠㅠ

답변을 작성하려면 로그인이 필요합니다.