할당 동작이 PHP의 객체에 어떤 영향을 미칩니까: 값과 참조?

Barbara Streisand
풀어 주다: 2024-10-22 07:25:30
원래의
553명이 탐색했습니다.

How Does Assignment Behavior Affect Objects in PHP: Value vs. Reference?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!