PHP의 객체 할당 이해: 값과 참조
PHP의 객체 할당과 관련하여 값과 참조의 차이 이해 행동이 중요합니다. PHP는 값이나 참조로 개체를 할당할 수 있습니다.
원본 코드 조각
다음 PHP 코드를 고려하세요.
<code class="php">class Foo { var $value; function foo($value) { $this->setValue($value); } function setValue($value) { $this->value = $value; } } class Bar { var $foos = array(); function Bar() { for ($x = 1; $x <= 10; $x++) { $this->foos[$x] = new Foo("Foo # $x"); } } function getFoo($index) { return $this->foos[$index]; } function test() { $testFoo = $this->getFoo(5); $testFoo->setValue("My value has now changed"); } }</code>
질문: 할당 동작
Bar::test() 메서드가 실행되어 foo 객체 배열의 foo # 5 값을 변경하면 배열의 실제 foo # 5가 영향을 받나요? , 아니면 $testFoo 변수가 함수가 끝나면 더 이상 존재하지 않는 지역 변수가 될까요?
답변: 참조에 의한 할당
동작을 결정하려면 , 주어진 코드를 분석해 보겠습니다.
<code class="php">$b = new Bar; echo $b->getFoo(5)->value; $b->test(); echo $b->getFoo(5)->value;</code>
이 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Foo #5 My value has now changed
설명
PHP는 다음과 같이 개체를 할당합니다. 버전 5에서는 기본적으로 참조입니다. 이는 foo # 5 객체가 getFoo()에 의해 반환될 때 동일한 객체에 대한 참조가 $testFoo 변수에 저장된다는 것을 의미합니다.
결과적으로 setValue() $testFoo에서 메서드가 호출되면 로컬 복사본뿐만 아니라 배열의 실제 foo # 5 개체가 수정됩니다. Bar::test() 메소드가 실행된 후에도 foo#5의 값이 변경되는 이유가 바로 여기에 있습니다.
값 할당에 대한 참고 사항
원하는 경우 clone 키워드를 사용하면 참조 대신 값으로 객체를 할당할 수 있습니다:
<code class="php">$testFoo = clone $this->getFoo(5); $testFoo->setValue("My value has now changed");</code>
위 내용은 할당 동작이 PHP의 객체에 어떤 영향을 미칩니까: 값과 참조?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!