[PHP] String 객체를 다루는 방법 (EOT, ob_start, ob_get_contents, ob_end_clean, ob_end_flush)
안녕하세요. 명월입니다.
이 글은 PHP에서 String 객체를 다루는 방법에 대한 글입니다.
기본적으로 PHP는 스크립트이기 때문에 String 객체를 다루는 것에 대해 컴파일 언어보다는 많이 편합니다. 뭐 요즘에는 Java나 C#의 경우도 Formatter나 보간법등을 통해 예전보다는 사용하기 많이 편해졌습니다.
링크 - [C#] String 보간법(interpolation)
PHP에서 String을 다루는 방법은 가장 기본적인 스트링 변수를 생성($str)하고 점(.)을 통해서 객체를 이어갑니다. 그리고 출력을 할 때는 echo나 <?=$str ?> 형식을 사용합니다.
<?php
// 변수 선언
$str = "hello";
// 문자열 연결하기
$str = $str." world";
?>
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<?=$str?>
</body>
</html>
여기서 String 내용이 길거나 많은 개행이 들어가 있는 글이라면 위처럼 사용하면 코딩 길이가 길어지게 됩니다. 그럴 때 사용할 수 있는 문법이 EOT 문법입니다.
링크 - https://www.php.net/manual/en/language.types.string.php
<?php
// 시작은 <<<(구분문자)
$str = <<<EOT
Hello world <br />
welcome <br />
EOT;
//(구분문자);
?>
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<?=$str?>
</body>
</html>
저는 예제로 구분문자를 EOT라고 했지만 만드시 「<<<EOT」가 아닌 「<<<TEST」 이런 식으로 구분문자를 만들면 됩니다.
그리고 EOT문법이 끝나는 부분에는 「(구분문자);」의 형식으로 끝나야 합니다. 주의할 점은 종료할 때 해당 행의 앞에 스페이스나 탭문자도 있어서는 안됩니다.
그리고 String 포멧 형식으로도 사용할 수 있습니다.
링크 - https://www.php.net/manual/en/language.types.string.php
(참고 - 사실 도큐멘트에는 Complex (curly) syntax이라고 표현이 되어 있는데.. 한국말로 표현이 어렵네요. 포멧팅 문법은 정식 용어가 아닙니다.)
<?php
$insert = "insert";
$str = <<<EOT
Hello world <br />
welcome <br />
<!-- 변수의 형태로 데이터를 넣을 수 있다. -->
{$insert}
EOT;
// 변수의 형태로 데이터를 넣을 수 있다.
$title = "title {$insert} end";
?>
<!DOCTYPE html>
<html>
<head>
<title><?=$title?></title>
</head>
<body>
<?=$str?>
</body>
</html>
그리고 PHP의 ob_start, ob_get_contents, ob_end_clean를 이용해서 PHP의 객체 버퍼를 이용해서 String를 작성할 수 있습니다.
링크 - https://www.php.net/manual/en/function.ob-start.php
링크 - https://www.php.net/manual/ja/function.ob-get-contents.php
링크 - https://www.php.net/manual/ja/function.ob-get-contents.php
<?php
// php 버퍼 작성 개시
ob_start();
// 사실 여기에서 아래의 data.php를 include하면 아래 ob_end_clean함수를 사용하지 않았으면 그대로 화면에 표시가 됩니다.
include "data.php";
// 여기까지 php 버퍼에 쓰여진 response body 데이터를 $output 변수에 담습니다.
$output = ob_get_contents();
// response body 초기화
ob_end_clean();
?>
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<?=$output?>
</body>
</html>
<?php
$data = 'data';
?>
hello world<br />
<?=$data?>
아마도 이 문법을 잘 사용하면 smarty나 twig같은 PHP 템플렛을 만들 수 있습니다.
이 ob_start()에 대한 설명이 나온 김에 갱신하는 방법까지 소개하겠습니다.
<?php
function callback($buffer)
{
// 버퍼 안에 있는 값이 string으로 나온다.
// ##data##의 문자를 hello world로 치환한다.
return str_replace("##data##","hello world",$buffer);
}
// php 버퍼 작성 개시
ob_start("callback");
?>
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
##data##
</body>
</html>
<?php
// 버퍼 갱신을 하는데 start에서 선언 된 callback 함수가 호출된다.
ob_end_flush();
?>
여기까지 PHP에서 사용하는 PHP 문법에 대해 설명헀는데 꽤 여러가지 형태로 String를 다룰 수 있습니다.
제 생각에는 이런 String을 다룰 수 있는 기법이 있어서 블로그 플랫폼이나 게시판 플랫폼이 PHP로 많이 작성되지 않을까 생각합니다.
여기까지 PHP에서 String 객체를 다루는 방법에 관한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Development note > PHP' 카테고리의 다른 글
[PHP] PHP와 JSP 간의 Session 공유(WDDX) (2) | 2019.11.08 |
---|---|
[PHP] PHP에서 파일을 압축 또는 해제하는 방법 (0) | 2019.11.07 |
[PHP] htmlParser(phpquery라이브러리)를 이용해 XML파일(HTML)을 사용하는 방법 (0) | 2019.11.06 |
[PHP] ajaxForm을 이용한 파일 업로드(프로그래스바로 파일 업로드 상태를 표시하는 방법) (0) | 2019.10.26 |
[PHP] PHPMailer 라이브러리를 이용해서 메일 발송하는 방법 (0) | 2019.10.19 |
[PHP] PHP의 HttpConnection 도구 cURL 사용 방법 (0) | 2019.10.18 |
[PHP] Apache 환경의 같은 호스트 안에서 PHP와 Java(Servlet)를 동시에 기동, 운영하는 방법 (0) | 2019.10.17 |
[PHP] 로그 라이브러리 Log4Php (0) | 2019.10.13 |