2012-10-18 4 views
1

EDIT : 개체에 비즈니스 로직을 적용한 다음 다른 프로세스에서 옆으로 갈 때 복제본이 필요한 경우 어떻게해야합니까? 서로 다른 결과를 얻을 가능성이 높은 비즈니스 로직을 오브젝트의 새 인스턴스에 다시 적용하거나 기존 오브젝트를 복제하는 것이 더 효율적입니까? 그러나 $ a = $ b를 수행하면 참조로 전달되는 객체가 충분하지 않습니다.참조로 패스 설정 해제 PHP

은의이 예제를 보자 :

$a = new test(); 
$b = $a; 
$b->setSomeProp('test'); 
$a->setSomeProp('failed'); 
echo $b->getSomeProp(); //returns 'failed' 

$a = new test(); 
$b = unserialize(serialize($a)); 
$b->setSomeProp('test'); 
$a->setSomeProp('failed'); 
echo $b->getSomeProp(); //returns 'test' 

이 참조를 대체 할 수있는 더 나은 방법이 있나요?

+0

개체는 항상 PHP에서 참조됩니다. 항상! 이 http://nativephp.com/archives/4 튜토리얼을 참조하십시오. PHP 5 이상 버전의 객체를 다루기 위해 참조가 필요하지 않습니다 (추가 시점을 기억조차하지 마십시오). 따라서 값을 대체 할 수 없습니다. 참조 변수 별칭을 다른 것으로 변경하기 만하면됩니다. 원본이 아닙니다. – CodeAngry

+1

두 번째로 잘린 [인쇄 실패] (http://codepad.org/TxCyCtxa); 당신이 이걸로 무엇을하려하는지 즉시 알 수는 없지만. – NullUserException

+0

@NullUserException var serialize하려고했습니다. 스 니펫은 예를 들어 솔루션에 객체에 적용해야하는 질문에 지정되었습니다. – Udan

답변

0

를 사용 unset the reference

해야합니다. 당신이 찾고있는 것은 clone입니다. 이 시도 :

$b = clone $a; 
0

예. 당신은 내가 당신의 코드가 변경 볼 수 있습니다 unset($b)

+0

나는 ($ b) 설정을 취소하고 싶지 않다 ... 나는 둘 다 필요하다. – Udan

0

참조 : @Artefacto에서 PHP global or $GLOBALS

: 당신이 전역 변수를 설정 해제하려면 "를 함수 내에서, 당신은 해제 사용해야합니다 ($ GLOBALS [ 'varname에']) , 글로벌 $ varname; unset ($ varname); "