PHP에서 나는 많은 문자열 조작을 자주하고 있습니다. 내 코드를 여러 함수로 나눠도 괜찮습니까? 문자열과 같은 기본 유형을 값으로 전달하면 성능에 큰 영향을 줄 수 있기 때문입니다.PHP의 원시 데이터 유형이 참조로 전달 되었습니까?
답변
개체 만 참조로 전달됩니다.
PHP가 copy-on-write를 사용하기 때문에 참조로 변경하면 성능이 향상되는 것은 아닙니다. 따라서 변수를 수정하면 사본이 만들어집니다.
코드를 함수로 분할해도 그 점에서 속도가 떨어지지는 않습니다. 함수를 호출하는 데 약간의 오버 헤드가 있지만, 10,000 개를 호출하는 루프에서 걱정하지 않아도되는 것이 아닌 한.
개체는 참조로 전달됩니다. pass-by-reference with the & operator을 명시 적으로 사용하지 않으면 다른 모든 것이 가치에 의해 전달됩니다.
PHP는 불필요한 복사를 피하기 위해 copy-on-write을 사용합니다.
예 (매개 변수 앞에 앰퍼샌드 &
을 사용하여) 참조로 전달할 함수를 명시 적으로 정의하거나 인수 앞에 앰퍼샌드가있는 함수를 호출하지 않으면 프리미티브가 전달됩니다. (후자는 더 이상 사용되지 않음)
자세한 내용은 this part of the documentation을 참조하십시오. 그것은 종종 대부분의 목적을 위해 그런 식으로 생각 될 수 있지만
편집
또한, PHP에서 "개체 참조에 의해 전달된다"고 성명, 단순화의 비트입니다. 이 chapter of the documentation은 차이점을 설명합니다.
기본적으로 모든 것이 값으로 전달됩니다. 참조로 무언가를 전달하려면 명시 적으로 명시해야합니다.
여기는 php documentation that explicitly states this behavior입니다.
참조를 통한 전달은 PHP에서 값을 전달하는 것보다 실제로 느립니다. 이 주장에 대한 올바른 인용문을 찾을 수 없습니다. 그것은 PHP 매뉴얼의 "References"섹션에 있습니다.
개체는 참조로 전달되지 않습니다. 객체는 참조 유형이지만 다른 값을 지정하지 않으면 함수 매개 변수로 값에 의해 전달됩니다. – Joseph
기술적으로는 참조로 전달되지 않지만 충분히 근접합니다. 이것은 PHP 5부터 마찬가지입니다 - PHP 4는 다릅니다. – Greg