programing

베스트 프랙티스: PHP에서 긴 여러 줄 문자열로 작업합니까?

javaba 2022. 11. 25. 21:01
반응형

베스트 프랙티스: PHP에서 긴 여러 줄 문자열로 작업합니까?

주의: 매우 간단한 질문이라면 죄송하지만 코드 포맷에 강박증이 있습니다.

이메일의 본문을 구성하는 문자열을 반환하는 기능이 있는 클래스가 있습니다.이 텍스트는 이메일에 올바르게 표시되도록 포맷하고 싶지만, 내 코드가 펑키해 보이지 않도록 하고 싶다.제 말은 이렇습니다.

class Something
{
    public function getEmailText($vars)
    {
        $text = 'Hello ' . $vars->name . ",

The second line starts two lines below.

I also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
        return $text;
    }
}

단, 다음과 같이 쓸 수도 있습니다.

public function getEmailText($vars)
{
    $text = "Hello {$vars->name},\n\rThe second line starts two lines below.\n\rI also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
    return $text;
}

하지만 새 노선과 마차 반납은 무슨 소용이죠?른른른? 이이?\n\n 하는 것\r\r ★★★★★★★★★★★★★★★★★」\n\r선 사이에 선 간격을 만들 때는 어떤 것을 사용해야 합니까?

다음으로 출력 버퍼링과 세습 구문 옵션이 있습니다.

오브젝트에 긴 여러 줄의 스트링을 사용하는 경우 어떻게 대처합니까?

또는 를 사용해야 합니다.

$var = "some text";
$text = <<<EOT
  Place your text between the EOT. It's
  the delimiter that ends the text
  of your multiline string.
  $var
EOT;

「 」의 heredoc ★★★★★★★★★★★★★★★★★」nowdoc가 PHP에 .heredocPHP 되는 nowdoc그대로 출력됩니다.

$var = "foo";
$text = <<<'EOT'
  My $var
EOT;

경우, 「 」$text"My $var" 아니라, 이에요."My foo".

주의:

  • 전 ★★★★★★EOT;.그렇지 않으면 오류가 발생합니다.
  • (「」/「」)EOT텍스트를 감싸는 것은 임의입니다.즉, 다른 문자열을 사용할 수 있습니다.<<<FOO ★★★★★★★★★★★★★★★★★」FOO;
  • EOT : 전송 종료, EOD : 데이터 종료.[Q]

pix0r과 같은 시스템을 사용하고 있기 때문에 코드를 읽을 수 있다고 생각합니다.때로는 줄 바꿈을 큰따옴표로 구분하여 문자열의 나머지 부분에 작은따옴표를 사용하기도 합니다.이렇게 하면 텍스트의 나머지 부분보다 눈에 띄고 변수도 이중 따옴표로 묶은 문자열 안에 삽입하는 것보다 연결을 사용하는 것이 더 잘 나타납니다.예를 들어 다음과 같은 작업을 할 수 있습니다.

$text = 'Hello ' . $vars->name . ','
      . "\r\n\r\n"
      . 'The second line starts two lines below.'
      . "\r\n\r\n"
      . 'I also don\'t want any spaces before the new line,'
      . ' so it\'s butted up against the left side of the screen.';

return $text;

줄 바꿈에 대해서는 이메일에서는 항상 \r\n을 사용해야 합니다.PHP_EOL은 php가 실행되고 있는 운영 체제에서 사용하도록 의도된 파일용입니다.

긴 텍스트에 템플릿을 사용합니다.

E-메일 전송txt에는 다음이 포함됩니다.

hello {name}!
how are you? 

PHP에서는 다음을 수행합니다.

$email = file_get_contents('email-template.txt');
$email = str_replace('{name},', 'Simon', $email);

" " " \n "/"/"\r두 번째 예시와 같이 코드 줄이 매우 길면 올바른 느낌이 들지 않습니다. 코드를 읽으면 결과를 볼 수 없기 때문에 스크롤해야 합니다.

이런 상황에서는 항상 Geredoc(또는 Nowdoc, PHP > = 5.3을 사용하는 경우)를 사용합니다.쓰기 쉽고 읽기 쉬우며, 초긴 행이 필요 없습니다.

예:

$var = 'World';
$str = <<<MARKER
this is a very
long string that
doesn't require
horizontal scrolling, 
and interpolates variables :
Hello, $var!
MARKER;

및마커: '마커'('));

물론 GREEDOC을 사용할 수도 있지만 코드를 읽기 쉽도록 하기 위해서는 문자열을 여러 줄로 줄 바꿈으로써 첫 번째 예시와 크게 다르지 않습니다.

여러 줄의 문자열이 보기 좋고 코드와 잘 어울리기를 원한다면 문자열을 함께 연결할 것을 권장합니다.

$text = "Hello, {$vars->name},\r\n\r\n"
    . "The second line starts two lines below.\r\n"
    . ".. Third line... etc";

이것은 GREEDOC 또는 여러 줄 문자열보다 약간 느릴 수 있지만 코드 들여쓰기에 따라 잘 흘러서 읽기 쉬워집니다.

Javascript에 대해서는 조금 더 마음에 드는데, 아직 언급되지 않았기 때문에 여기에 포함시킬 가치가 있을 것 같습니다.

$var = "pizza";

$text = implode(" ", [
  "I love me some",
  "really large",
  $var,
  "pies.",
]);

// "I love me some really large pizza pies."

작은 것은 연결된 문자열보다 배열 구조를 사용하는 것이 더 쉽다는 것을 알게 되었습니다.

관련: 삽입과 콘센트 성능 비교

다음 항목도 사용할 수 있습니다.

<?php
ob_start();
echo "some text";
echo "\n";

// you can also use: 
?> 
some text can be also written here, or maybe HTML:
<div>whatever<\div>
<?php
echo "you can basically write whatever you want";
// and then: 
$long_text = ob_get_clean();

새로운 라인 및 캐리지 리턴에 대한 질문입니다.

사전 정의된 글로벌 상수 PHP_EOL을 사용하면 크로스 플랫폼 호환성 문제가 해결되므로 사용할 것을 권장합니다.

이 질문은 SO에 대해 사전에 제기되었으며 자세한 내용은 "When do I use the PHP constant PHP_EOL"을 참조하십시오.

그렇게 믿는 사람

"abc\n" . "def\n"

여러 줄의 문자열이 잘못되어 있습니다.여러 줄의 문자열이 아니라 연결 연산자가 있는 두 문자열입니다.예를 들어 이러한 연결된 문자열은 미리 정의된 배열의 키로 사용할 수 없습니다.안타깝게도 php는 다음 형식의 실제 다중 행 문자열을 제공하지 않습니다.

"abc\n"
"def\n"

only만.HEREDOC ★★★★★★★★★★★★★★★★★」NOWDOC이러한 구문에서는 중첩된 코드 들여쓰기가 깨지기 때문에 템플릿에 더 적합합니다.

하지만 새 노선과 마차 반납은 무슨 소용이죠?뭐가 다른데?\n\n은 \r\r과 \n\r 중 어느 쪽에 해당합니까?라인 간극을 만들 때 어떤 것을 사용해야 합니까?

아무도 실제로 이 질문에 대답하지 않는 것 같아서 제가 여기 있습니다.

\r을 .

\n은 줄바꿈'을 .

그 진짜 이유는 타자기로 거슬러 올라간다.타이핑을 하면 문자별로 '캐리지'가 천천히 타자기 오른쪽으로 미끄러집니다.종착역에 도착하면 마차를 반납하고 새로운 노선으로 이동합니다.새 행으로 이동하려면 타이프 라이터에게 행을 공급하는 레버를 뒤집어야 합니다.따라서 이러한 액션을 조합하여 캐리지 리턴 라인 피드라고 부릅니다.말 그대로:

회선 피드,\n, 는 다음 행으로 이동하는 것을 의미합니다.

마차 반환,\r는 커서를 행의 선두로 이동하는 것을 의미합니다.

궁극적으로는Hello\n\nWorld화면에 다음과 같은 출력이 나타납니다.

Hello

     World

반면에.Hello\r\rWorld는 다음과 같은 출력이 됩니다.

두 글자를 조합할 때에만\r\n알고 있는 라인에 대한 공통적인 이해를 가지고 있다는 것을요.예.Hello\r\nWorld다음과 같은 결과가 됩니다.

Hello
World

그리고 물론.\n\r같은 시각 출력을 얻을 수 있습니다.\r\n.

원래 컴퓨터에는\r그리고.\n말 그대로요그러나 요즘은 캐리지 리턴에 대한 지원이 희박합니다.일반적으로는 모든 시스템에서 이 기능을 사용하여 회피할 수 있습니다.\n스스로요.OS에 따라 달라지는 것은 아니지만 출력 내용에 따라 달라집니다.

그래도 난 항상 이걸 사용하는 걸 추천하고 싶어\r\n아무데나 가든지!

언급URL : https://stackoverflow.com/questions/1848945/best-practices-working-with-long-multiline-strings-in-php

반응형