sourcecode

php 클래스에서 html을 사용하는 것이 나쁜가요?

copyscript 2023. 4. 4. 21:56
반응형

php 클래스에서 html을 사용하는 것이 나쁜가요?

클래스 함수에서 html을 사용하는 데 문제가 있나요?DOM에서 호출하기 때문에 문자열을 반환할 필요가 없습니다.

public function the_contact_table(){
    ?>
    <div>
        some html here
    </div>
    <?php
}

또 끈이 필요할 때는 이 방법을 사용하나요?더 좋은 방법이 있을까요, 아니면 이게 비교적 표준적인 건가요?

public function get_single(){
    ob_start();?>
        <div class='staff-member single'>
            <div class='col left'>
                <div class='thumbnail'>
                    thumbnail
                </div>
                <?php $this->the_contact_table(); ?>
            </div>
            <div class='col right'>

            </div>
        </div>      
    <?php
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

갱신하다

내가 왜 이걸 하는지 설명했어야 했어.Wordpress 플러그인을 만들고 있는데 포스트 타입 출력을 제어하고 싶습니다.그래서 저는 아래와 같은 필터를 사용하고 있습니다.

public function filter_single($content){
     global $post;
     if ($post->post_type == 'staff-member') {

         $sm = new JM_Staff_Member($post);
         $content = $sm->get_single();
     }
     return $content;
}

보시다시피 워드프레스 코어에 문자열을 반환해야 합니다.

긴 문자열을 변수에 저장하는 경우 출력 버퍼링 대신 GREEDOC를 사용해야 합니다.다음과 같습니다.

$content = <<<EOD
content here
EOD;

EOD어떤 것이든 상관없습니다만, 다음의 2개의 중요한 점에 주의해 주세요.

  1. 앞에 여백을 둘 수 없으며 전용선상에 있어야 합니다.
  2. 콘텐츠 내에서 찾을 수 있는 문자열이 아니어야 합니다.

PHP > = 5.3을 사용하는 경우 NOWDOC를 사용해야 합니다. NOWDOC은 문서 내의 변수를 구문 분석하지 않습니다(필요한 경우를 제외하고).NOWDOC 구문의 유일한 차이점은 sentinel이 따옴표로 둘러싸여 있다는 것입니다.

$content = <<<'EOD'
content here
EOD;

출력 버퍼링에서 벗어난 이유는 서버로 인해 클라이언트에 전송된 데이터가 청킹되지 않기 때문입니다.즉, 콘텐츠는 클라이언트에 순차적으로 전송되어 표시되지 않고 강제로 한꺼번에 전송되기 때문에 요청 속도가 느려 보입니다.은 기능이 하게 기능하는 입니다.echo데이터를 반환하는 대신 데이터를 반환하거나 특정 애플리케이션을 위한 도구를 사용할 수 있습니다.또, 출력 버퍼링(함수 호출을 수반하기 때문에)을 사용하는 경우나, 문자열을 변수에 포함하거나 뷰를 포함한 경우, 실행 시간에 영향을 줄 것으로 생각됩니다.

이것이 적절한지에 대한 질문에 답하기 위해 MVC 어플리케이션에서는 모든 HTML 및 기타 콘텐츠가 자신의 뷰 내에 포함되어야 한다고 생각합니다.그러면 컨트롤러는 뷰를 호출하여 표시할 수 있으므로 뷰 표시에 관련된 코드를 알 필요가 없습니다.여전히 뷰에 정보(제목, 작성자, 태그 배열 등)를 전달할 수 있지만, 여기서의 목적은 내용과 논리를 분리하는 것입니다.

Wordpress 템플릿과 코드는 처음에는 상당히 엉성해 보이고, 전혀 구현이 안되면 느슨하게 MVC를 구현하기 때문에, 이것에 대한 뷰를 작성하는 것이 너무 힘들다면, WP의 스타일에 맞는 슬러시라고 말할 수 있습니다.

PHP 클래스 파일 내에 실제로 "Views"를 배치함으로써 프런트 엔드 개발자와 거리를 두는 것은 좋은 방법이 아닙니다.처음 PHP를 사용하기 시작했을 때 가장 큰 문제 중 하나는 클래스 내에서 동적으로 콘텐츠를 만들고 싶다는 것이었습니다.훌륭한 아이디어이지만, 팀의 많은 멤버가 가능한 한 원활하게 협력할 수 있도록 하고 싶다고 생각하고 있습니다.

"staff-member-single.php"라는 별도의 파일 안에 내용을 저장해야 합니다.이 파일은 함수에서 호출됩니다.

public function get_single(){
    ob_start();
    require_once('views/staff-member-single.php');
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

하지만 보통 재사용 가능한 방법으로 리팩터링해서 보면..

public function get_single()
{
    $string = $this->render_view_as_string('satff-member-single');
    return $string;
}

public function render_view($view)
{
    require('views/'.$view.'.php');
}

public function render_view_as_string($view)
{
    ob_start();
    $this->render_view($view);
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

애플리케이션 로직으로만 PHP를 사용하고 레이어(템플릿 엔진)로 데이터를 전송하는 것이 좋다고 생각합니다.이에 따라 MVC와 같은 패턴이 있습니다.

언급URL : https://stackoverflow.com/questions/11707030/is-it-bad-to-use-html-inside-a-php-class

반응형