2012-06-10 3 views
0
<?php 
class SimpleClass 
{ 
    public $var1; 
} 
$instance = new SimpleClass(); 
$assigned = $instance; 
$reference =& $instance; 
$instance->var1 = '$assigned will have this value'; 

$instance = null; // $instance and $reference become null 

var_dump($instance); 
var_dump($reference); 
var_dump($assigned); 
exit; 
?> 

아무도 도와 줄 수 있습니까? 위의 코드의 출력은 어떻게 제공 :PHP5 - 객체 할당 문제

NULL 
NULL 
object(SimpleClass)#1 (1) { 
    ["var"]=> 
    string(30) "$assigned will have this value" 
} 

내가 $instance$reference하지만 어떻게 $assignedNULL되었다하지 않는 NULL을 이해할 수있다. PHP 5에 대한 나의 이해에 따라 객체는 참조로 전달되므로, $assigned도 참조를 포함합니다.이 경우 역시 NULL이되어야합니다.

PHP 매뉴얼로 작성된 것은 "클래스의 이미 생성 된 인스턴스를 새 변수에 할당 할 때 새 변수는 할당 된 객체와 동일한 인스턴스에 액세스합니다.이 동작은 동일합니다. 인스턴스를 함수로 전달할 때. "

설명 할 수 있습니까?

답변

0

Object and reference

PHP를 참조하여 두 개의 서로 다른 변수가 동일한 값을 쓸 수있는 별칭 인 PHP 매뉴얼에서이다. PHP 5부터, 객체 변수는 객체 자체를 더 이상 값으로 포함하지 않습니다. 개체 접근자가 실제 개체를 찾을 수있게하는 개체 식별자 만 포함합니다. 인수로 객체를 보내거나 반환하거나 다른 변수에 할당하면 다른 변수가 별칭이 아닙니다. 동일한 객체를 가리키는 식별자 사본을 보유합니다.

0

$ instance = null; // $ instance와 $ reference가 null이됩니다.

이 시점에서 객체와의 연결을 해제했습니다. 그게 다야. 개체에 연결된 다른 변수가 있으므로 개체가 삭제되지 않습니다.

또한 var_dump ($ GLOBALS)를 사용하면 $ assigned와 $ instance & $ reference pair의 차이를 볼 수 있습니다. 선 아래