programing

PHP에서 ++$i와 $i++의 차이점은 무엇입니까?

goodsources 2022. 11. 1. 00:03
반응형

PHP에서 ++$i와 $i++의 차이점은 무엇입니까?

와의 차이는 무엇입니까?++$i그리고.$i++PHP로요?

++$i이 경우 사전 검증됩니다.$i++사후 처리

  • pre-pariable: 증분 변수i먼저 참조 해제하고 나서 참조 해제.
  • 사후 참조: 참조 해제 후 증가i

"PHP를 통해 포스트 인크리먼트($i+)와 프리 인크리먼트(+$i)를 할 수 있다는 사실을 활용하십시오.이 의미는 $j = $i++와 같은 내용을 쓰지 않는 한, 사전 준비는 거의 10% 더 빠릅니다. 즉, 기회가 있을 때 포스트 준비에서 사전 준비로 전환해야 합니다. 특히 꽉 막힌 루프에서 특히 마이크로 최적화에 대해 전문적으로 알고 있다면 더욱 그렇습니다!" - TuxRadar

자세한 설명을 위해 PHP의 사후 증가에는 이러한 10%의 오버헤드와 사전 증가의 원인이 되는 임시 변수가 저장되어 있는 것으로 문서화되어 있습니다.

++$i증분$i단, 의 값으로 평가됩니다.$i+1 $i++증분$i단, 의 오래된 값으로 평가됩니다.$i.

다음은 예를 제시하겠습니다.

$i = 10;
$a = $i++;
// Now $a is 10, and $i is 11

$i = 10;
$a = ++$i;
// Now $a is 11, and $i is 11

사용 전에 약간의 비용이 발생할 수 있습니다.$i++봐, 네가 이런 걸 할 때

$a = $i++;

정말 이렇게 하시는군요.

$temporary_variable = $i;
$i=$i+1;
$a=$temporary_variable;

++$i프리 인크리멘테이션

  1. $i증가하다
  2. 새 값이 반환됩니다.

$i++인크리멘테이션 후

  1. 의 가치$i내부 임시 변수에 복사
  2. $i증가하다
  3. 오래된 가치의 내부 복사$i반환되다
++$i //first increment $i then run line
$i++ //first run line then increment $i 

이 경우 차이는 없습니다.

for($i = 0;$i<3;++$i)var_dump $i;
/*
int(0)
int(1)
int(2)
*/
for($i = 0;$i<3;$i++)var_dump $i;
/*
int(0)
int(1)
int(2)
*/

단,

for($i = 0;$i<3; $j = ++$i )var_dump($j);
/*
NULL
int(1)
int(2)
*/
for($i = 0;$i<3; $j = $i++ )var_dump($j);
/*
NULL
int(0)
int(1)
*/

이 예는 간단히 설명된다

<?php 

$x = 10;  

echo $x++. ' '.$x;  // the result is 10 and 11

echo '<br>';

$y = 10;

echo ++$y. ' ' .$y; // the result is 11 and 11

// so the  $x++ is not showing +1 at first but the next time
// and the ++y is showing +1 first time but not increasing next

차이점은 다음과 같습니다.++$i증가하다$ivariable 및 return updated value, 반면$i++원래 값이 반환되므로 값을 늘립니다.

$prefix = 1;
$postfix = 1;
echo ++$prefix;   // 2
echo $postfix++;  // 1

$i++는 post-filename으로 알려져 있습니다.원래 값 $i를 $j에 먼저 할당한 후에만 $i의 값이 증가합니다.

++$i는 프리패키지라고 불립니다.값을 $j에 할당하기 전에 $i의 값이 증가하므로 업데이트된 값 $i가 $j에 할당됩니다.

이런 이유로,

$i = 4;
$j = $i++;
// Now, $i = 5 and $j = 4

$i = 4;
$j = ++$i;
// Now, $i = 5 and $j = 5

이러한 이론은 감소에도 비슷한 방식으로 적용된다.

이게 도움이 됐으면 좋겠네요!

jldupont의 요점을 설명하려면:

$i = 1;
$x = $i++;
echo $x; // prints 1
$x = ++$i;
echo $x; // prints 3

사전 및 사후 증가를 보는 또 다른 방법은 두 문장을 결합하는 약자입니다.

프리 인크리먼트

// long form
$y = $y + 1;
$x = $y; // any statement using $y

// shorthand
$x = ++$y; // the same statement using $y

증가 후

// long form
$x = $y; // any statement using $y
$y = $y + 1;

// shorthand
$x = $y++; // the same statement using $y

아마 예시로 가장 잘 설명할 수 있을 거야

증가 후:

$zero = 0;
$n = $zero++; //$n is zero

증가 전:

$zero = 0;
$n = ++$zero; //$n is one

간단한 답변:

  • Prefix를 지정하면 값이 증가하고 값이 증가합니다.
  • Postfix는 값을 증가시키고 증가하기 전의 값을 반환합니다.
  • 프리픽스가 더 빠릅니다.

장황한 답변:이러한 기능을 직접 실장하는 방법을 조금만 생각해 보면 프레픽스가 빠른 이유를 알 있을 것입니다.사실 포스트픽스는 실제로 (대부분) 프레픽스를 사용하여 구현됩니다.

const T T::operator ++ (int) // postfix
    {
    T orig(*this);
    ++(*this); // call prefix operator
    return (orig);
    }

특별한 이유가 없는 한 포스트픽스를 피합니다.복잡한 데이터 유형의 경우 속도 차이가 상당히 클 수 있습니다.

사실 며칠 전에 이걸 찾아봤어요.내 정보원이야

post-fix increment 연산자의 주요 목적은 다음과 같은 사용입니다.

while(*condition*)
    $array[$i++] = $something;

이것은 어레이 반복을 회피하는 매우 우아한 방법입니다.내역:

  1. $i로 인덱싱된 어레이 요소에 $something 변수가 할당됩니다.
  2. 변수 $i가 증가합니다.
  3. 반복이 종료되면 조건이 확인됩니다.

그 외의 경우 모두 prefix 연산자를 사용해야 합니다.이것에 의해, 코드가 한층 더 명확해집니다(특정 변수의 증분치를 이미 사용하고 있는 것을 확인할 수 있습니다).

다음 코드를 실행하여 ++$i가 $i++보다 10% 빠른지 테스트했습니다.코드 결과가 안정적이지 않다는 건 인정하지만 그래도 최소한 10% 가까운 수치를 봤어야 했어요.가장 높은 점수를 받은 것은 대략 4~4.5%였습니다.

<?php

$randomFloat = rand(0, 10) / 10;

$before1 = microtime(true);

for($i=0; $i <1000000; ++$i){
    $rand = (rand(0, 10) / 10) * (rand(0, 10) / 10);
}

$after1 = microtime(true);
echo 'it took '.($after1-$before1) . ' seconds fot ++$i<br />';

$before2 = microtime(true);

for($i=0; $i <1000000; $i++){
    $rand = (rand(0, 10) / 10) * (rand(0, 10) / 10);
}

$after2 = microtime(true);
echo 'it took '.($after2-$before2) . ' seconds fot $i++<br /><br />';

echo '++$i is '.((($after1-$before1)*100)/($after2-$before2)-100).'% faster than $i++';

두 연산자는 여전히 구문이 의미하는 대로 증분합니다.프레픽스 또는 포스트픽스에 관계없이 변수는 1씩 증가합니다.둘 사이의 차이는 반환값에 있습니다.

1. 프레픽스 인크리먼트는 변수 값이 증가된 후 값을 반환합니다.

2. 한편, 일반적으로 사용되는 포스트픽스 증분에서는 변수 값이 증가하기 전에 반환됩니다.

// Prefix increment

let prefix = 1;
console.log(++prefix); // 2

console.log(prefix); // 2

// Postfix increment

let postfix = 1;

console.log(postfix++); // 1

console.log(postfix); // 2

이 규칙을 기억하기 위해 나는 두 개의 구문을 생각한다.프리픽스 인크리먼트를 입력하면 ++x 라고 표시됩니다.여기서 ++의 위치는 중요합니다.++x라고 하는 것은 먼저 (+)를 늘린 다음 x의 값을 반환하는 것을 의미하므로 ++x가 됩니다.포스트픽스 인크리먼트는 반대로 동작합니다.x++라고 하는 것은 x의 값을 먼저 반환한 다음 (+) 값을 증가시켜 x++로 하는 것을 의미합니다.

언급URL : https://stackoverflow.com/questions/1756015/whats-the-difference-between-i-and-i-in-php

반응형