>  기사  >  백엔드 개발  >  PHP의 참조 연산자 &

PHP의 참조 연산자 &

高洛峰
高洛峰원래의
2016-10-17 11:15:403175검색

PHP의 참조 연산자 &. C에 익숙한 사람이라면 C에 포인터라는 것이 있다는 것을 알고 있습니다. 포인터는 메모리 주소를 가리킵니다. 이 & 도 같은 기능을 가지고 있습니다.

다음 코드를 보세요.

$source="110";
$a=$source;
$b=&$source;
$source="120";
echo $a."\r\n",$b;

이 코드를 실행해 보면 4번째의 $source 값에 따라 $a 값이 변하지 않는 문제를 발견하게 됩니다. 원래 할당은 "110"이었습니다. $a가 할당되었을 때 $source의 값은 110이었습니다. 그녀는 $source의 값을 자신에게 복사했습니다.

분명히 $b 변수의 값이 변경되었음을 알 수 있습니다. $a와 변수 $b가 거의 동시에 할당된 값이 이렇게 큰 차이가 있는 이유는 무엇입니까? 기타. 사람을 구하는 것의 차이는 충분히 크다!

이것은 PHP의 참조 연산자 &에 문제가 있습니다. 값을 할당할 때 $b 변수가 &에 적용되기 때문에 $b는 "110"을 자신에게 복사하지 않고 $source의 홈을 직접 가리킵니다. 이제 $source에는 그의 $b가 됩니다. $source가 어떻게 변경되든 $b가 변경됩니다. 마치 호스트와 두 모니터 사이의 관계와 마찬가지로 $b가 변경되면 당연히 $source도 변경됩니다.

보기 :

$b=122;
echo $source;

출력 결과: 122, 아시다시피 이 두 변수는 이제부터 하나의 "사람"입니다. 괴롭히지 마세요!

사실 프로그램 가독성과 그에 따른 프로그래밍 오작동을 위해 & 참조 연산자를 사용하지 않는 것이 좋습니다. 생각해 보세요. 10,000행 이전에는 $b=&$source;를 사용했고, 10,000행 이후에는 기억나지 않을 수도 있습니다. 실수로 잘못된 값을 할당했다면 디버깅할 때 충분히 마실 수 있을 것입니다! 하하...

사실 이 연산자는 데이터베이스 연결에 더 많이 사용됩니다. 왜냐하면 데이터베이스 연결 개체를 만들 때 하나만 필요한 경우가 많고 너무 많으면 쓸모가 없기 때문입니다.

클래스가 있다고 가정해 보겠습니다.

class MysqlConnect{} //用来创建数据库连接,那么我们每次调用的时候可以这样写
  
$conn=& new MysqlConnect();

이러한 작성 방식을 사용하면 데이터베이스 연결이 반복적으로 생성되어 시스템 리소스를 소비하지 않도록 할 수 있습니다. 하지만 실제로 여러 개의 서로 다른 연결이 필요한 경우에는 이렇게 작성하면 안 됩니다.

물론, PHP 참조 연산자는 객체를 생성할 때 실제로 유용합니다. PHP 스크립트에서 수천 개의 객체를 생성하면 시스템 오버헤드가 실제로 매우 높습니다. 여러 개를 만들 필요가 없다면 &!를 사용해 보세요.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.