PHP : 1 라인 또는 여러 줄로 연결하는 것이 더 낫습니까? 아니면 차이가 있습니까?

StackOverflow https://stackoverflow.com/questions/431569

  •  08-07-2019
  •  | 
  •  

문제

차이가 있거나 다음 중 하나보다 낫습니다.

$var = '';
...
$var .= 'blah blah';
$var .= $var2;
$var .= 'blah blah';

또는

$var = '';
...
$var .= 'blah blah' . $var2 . 'blah blah';

속도 차이가 있습니까? 아니면 다른 것을 선택하는 이유가 있습니까?

도움이 되었습니까?

해결책

문자열을 반향하면 작은 차이가 있습니다.

echo $var1,$var2,$var3 // comma (echo with multiple arguments)

보다 약간 빠릅니다

echo $var1.$var2.$var3 // dot   (concat and echo)

다른 팁

페즈와 토트는 모두 정확합니다. 나는 여기서 본 것보다 더 좋아 보인다고 생각하는 것을 지적하고 싶습니다.

$var  = "line 1 \n";
$var .= "line 2 \n";

~ 대

$var = "line 1 \n"
     . "line 2 \n";

나는 시각적으로 첫 번째를 선호하는 것이 시각적으로 선호합니다. 결과는 하나의 문자열 $ var입니다. 또한 멍청한 버그를 방지합니다.

$var  = "line 1 \n";
$var .= "line 2 \n";
$vat .= "line 3 \n";
$var .= "line 4 \n";

몇 가지 짧은 줄은 중요하지 않습니다. 읽기에 더 명확한 것을 사용하십시오.

그러나 당신이 그들 중 많은 것 (수천 명)이 너무 짧지 않은 경우, 아마도 배열에 보관하고 함께 합류하고 싶을 것입니다. (그러한 코드는 종종 ". ="를 사용하여 문자열을 연결하는 것만 큼 읽기 쉽습니다. 따라서 성능 제단에 명확성을 희생하지 않습니다.)

편집 : 나는 위의 생각이 유효하다고 생각하지 않습니다. PHP의 문자열은 변경 가능합니다.

차이를 만들지 않습니다. 둘 다 연결이므로 읽기가 가장 쉬운 것은 사용해야합니다.

성과가 가장 좋은 후에는 배열을 사용한 다음 완료했을 때이를 청소하십시오.

$var = array();
$var[] = "line 1\n";
$var[] = "line 2\n";
$var[] = "line 3";
$var = implode('', $var);

어떤 방식 으로든 수천 개의 큰 문자열로 작업하지 않는 한 속도 차이는 무시할 수 있습니다.

코드에서 수동으로 연결하고있는 것은 성능이 중요하지 않으므로 가독성은 왕입니다. 나를 위해 이것은 종종 사용을 의미합니다 Heredoc 통사론. 나는 그것이 내 압입 구조를 깨는 방식이 마음에 들지 않지만, 줄이 나거나 탭을 문자열에 올바르게 삽입하려는 경우 특히 좋습니다.

나는 그런 짧은 상황에 대해 알지 못할 것이라고 생각합니다. 나는 일반적으로 내가 사용할 수있는 가독성 이유를 결정합니다. 나는 두 가지 상황에서만 나뉘 었습니다. 그렇지 않으면 한 줄에서는 다음과 같습니다.

a) 코드가 사용자가 볼 수있는 것을 다소 모방하도록 멀티 라인 응답을 작성하십시오. 이런 식으로 오타와 실수를 더 쉽게 잡을 수 있다는 것을 알았습니다.

$var  = "line 1 \n";
$var .= "line 2 \n";

b) 라인 길이. 선이 내 창을 넘치면 창을 넘어 서면 일반적으로 분해되어 끝을 읽기 위해 줄의 끝으로 이동할 필요가 없습니다. 대부분의 언어는 라인 연속 문자를 지원하므로 코드에서 물리적으로 깨뜨릴 필요는 없지만, 가지고 있지 않은 일부 언어로 일한 이후로 습관을 가질 필요는 없습니다.

많은 양의 데이터를 단일 문자열로 가져 오는 가장 빠른 방법은 Echo'd 출력을 캡처하는 출력 버퍼링입니다.

ob_start();
/* many echos. For example, in a loop */
$outString = ob_get_contents(); // get the complete string
ob_end_clean();

일반적으로 프로그램의 속도에 큰 차이를 만들지는 않을 것입니다. 나중에 수정/업데이트를 위해 돌아와야하므로 무엇을하고 있는지 분명하게 보이게하십시오. 가독성은 왕입니다.

의미있는 차이는 없습니다. 코딩 선호도의 문제 일뿐입니다.

배열을 만드는 것이 가장 빠른 방법 일 수있는 직감이있었습니다. 내가 틀렸어! 그러나 $ str = $ str + $ bla를 수행하는 것은 실제로 속도가 느립니다! 당신이 많은 연결을하는 경우에만 중요합니다. 내 테스트 코드는 다음과 같습니다.

<?php

function doit($n) {

    $str2concat = 'Esta es una prueba. ¿Cuál manera es más rápida?';

    $str = '';

    // option 1
    $start = microtime(true);

    for( $i=0; $i <= $n; $i++ ) {
        $str .= $str2concat;
    }

    $end = microtime(true);
    echo " Concat: $n Iterations, duration:" . ($end-$start) . "\n";

    // option 2
    $str = '';
    $start = microtime(true);

    for( $i=0; $i <= $n; $i++ ) {
        $str = $str . $str2concat;
    }

    $end = microtime(true);
    echo "Concat2: $n Iterations, duration:" . ($end-$start) . "\n";

    // option 3
    $str = [];
    $start = microtime(true);

    for( $i=0; $i <= $n; $i++ ) {
        $str[] = $str2concat;
    }

    $str = implode( $str );
    $end = microtime(true);
    echo "Implode: $n Iterations, duration:" . ($end-$start) . "\n\n";

}

doit( 5000 );
doit( 10000 );
doit( 100000 );

내가 얻은 결과는 다음과 같습니다.

 Concat: 5000 Iterations, duration:0.0031819343566895
Concat2: 5000 Iterations, duration:0.41280508041382
Implode: 5000 Iterations, duration:0.0094010829925537

 Concat: 10000 Iterations, duration:0.0071289539337158
Concat2: 10000 Iterations, duration:1.776113986969
Implode: 10000 Iterations, duration:0.013410091400146

 Concat: 100000 Iterations, duration:0.06755805015564
Concat2: 100000 Iterations, duration:264.86760401726
Implode: 100000 Iterations, duration:0.12707781791687
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top