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 스크립트에서 수천 개의 객체를 생성하면 시스템 오버헤드가 실제로 매우 높습니다. 여러 개를 만들 필요가 없다면 &!를 사용해 보세요.