코드는 아래 고려 : 상기 코드같은 객체를 가리키는 두 객체 인스턴스 중 하나가 NULL을 할당 할 때 다르게 동작하는 이유는 무엇입니까?
<?php
class SimpleClass {
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
$instance = new SimpleClass();
$assigned = $instance;
$instance->var = '$assigned will have this value';
var_dump($instance);
echo "<br>";
var_dump($assigned);
?>
출력은 아래와 같다 :
object(SimpleClass)#1 (1) { ["var"]=> string(30) "$assigned will have this value" }
object(SimpleClass)#1 (1) { ["var"]=> string(30) "$assigned will have this value" }
내가 아니라 상기 프로그램을 알.
$instance
또는
$assigned
에 대한 변경 사항은 동일한 객체 인스턴스를 가리키고 있기 때문에 다른 하나에 반영된다는 사실을 이해했습니다.
그러나이 원칙은 NULL
을 두 객체 인스턴스 중 하나에 할당 할 때 아래 코드에서 실패합니다. 두 개체 인스턴스 모두 NULL
이되어야하지만 두 인스턴스 중 하나에는 NULL
이 포함되고 다른 인스턴스에는 NULL
이 포함되지 않아야합니다. 왜 그렇게? 클래스 방법 displayVar()
텍스트 'a default value'
메아리되는 호출되고 있지 아니 위의 코드에서, 또한
NULL
object(SimpleClass)#1 (1) { ["var"]=> string(15) "a default value" }
도 존재하는 임의의 생성자 메소드는 다음이있다 : 상기 코드
<?php
class SimpleClass {
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
$instance = new SimpleClass();
$assigned = $instance;
$instance = NULL;
var_dump($instance);
echo "<br>";
var_dump($assigned);
?>
출력은 아래와 같다 어떻게 개체 인스턴스 $assigned
의 var
속성이 NULL
대신 설정 되나요?
둘 모두의 객체 인스턴스가 동일한 객체를 가리키는 이유는 NULL
이 문자열 중 하나에 할당되었거나 그 중 하나에 의미있는 값이 할당 될 때 (예상되는) 다른 방법으로 동작하는 이유는 무엇입니까?
개체를 변수에 할당하면 해당 개체의 전체 개체가 아니라 해당 개체의 '메모리 주소'만 복사됩니다. 내용이있는 객체를 복사하려면 다음을 사용해야합니다 : $ assigned = clone $ instance; – JerzySBG