2012-01-03 3 views
12

PHP로 된 객체가 MyObject입니다.PHP는 모든 객체 속성을 this로 복사합니다.

$myObject instanceof MyObject 

는 이제 class MyObject에 비 정적 함수가 있고, 거기에, 나는 "나", $this 좋아하지만, 나 또한 거기에 또 다른 목적을 가지고 참조를 사용합니다.

$this = $myObject을 수행하지 않고도 비슷한 효과를 내기 위해 set_object_vars($this, get_object_vars($myObject))과 같은 효과가 있습니까?

+0

"* 'this'* '와 같은'me '에 대한 참조를 사용하면 메소드에서'$ this'의 앨리어싱을 사용합니까? – Dan

+1

코드를 게시하는 것은 어떻습니까? –

+0

귀하의 질문에 약간의 검토가 필요하다고 생각합니다. 우리가 set_object_vars() 함수를 가지고 있다고해도 실제로는 같은 효과가 있습니까? 개체를 참조하는 것이 아니라 복사하는 것입니다. 자세한 내용은 PHP에서 참조를 복사 참조하십시오. – Slavic

답변

39
<?php 

class MyObject 
{ 
    public function import(MyObject $object) 
    { 
     foreach (get_object_vars($object) as $key => $value) { 
      $this->$key = $value; 
     } 
    } 
} 

는 내가 생각하고 싶은 것을 할 것입니다,하지만 당신은 다음에주의해야합니다

  1. get_object_vars 만이 아닌 정적 속성
  2. get_object_vars 만 찾을 접근 속성 에 따라 찾을 수 범위

범위에 따른 부분은 매우 중요하며 좀 더 설명 할 가치가 있습니다. PHP에 종속적 인 대신에에 종속되는 속성 범위를 알고 계셨습니까?

위의 예에서 클래스의 인스턴스에 있기 때문에 MyObjectprivate $bar 속성이있는 경우 get_object_vars이 표시된다는 것을 의미합니다. 다른 클래스의 인스턴스를 가져 오려고하면이 작업이 분명히 작동하지 않습니다.

+0

감사! 만약 그렇게 생각하지 않았어! 이제는 인스턴스에 속성 만 복사하면됩니다. 정적 속성은 부적합합니다 ^^ – arik

0

@Geoffrey 바첼 레트 우리는이를 향상시킬 수

class MyObject 
{ 
    //object or array as parameter 
    public function import($object) 
    { 
     $vars=is_object($object)?get_object_vars($object):$object; 
     if(!is_array($vars)) throw Exception('no props to import into the object!'); 
     foreach ($vars as $key => $value) { 
      $this->$key = $value; 
     } 
    } 
} 

의 차이는 당신이 일반 배열 (해시 테이블)뿐만 아니라 개체를 전달할 수 있다는 것을 여기에있다. 데이터베이스에서 오는 일부 데이터에 대해 예를 생각해보십시오.

관련 문제