2011-02-25 4 views
1

이렇게 쉬워야합니다. 개체에 대한 정보를 반환하는 사용자 지정 메서드가있는 PHP 클래스가 있습니다. 사용자 지정 메서드를 사용하여 특정 매개 변수가 개체에 설정되었는지 여부를 확인하고 싶습니다. 설정된 경우 속성을 반환하십시오. 그렇지 않으면 메서드는 데이터베이스에 연락하여 정보를 가져오고 개체의 속성을으로 설정해야합니다.PHP : 개체 메서드 내에서 개체 속성을 설정할 수 없습니까?

그러나 아래 코드를 실행할 때마다 개체의 속성이 설정되지 않은 것처럼 보입니다. retrieve_user_first_name 메소드는 시간마다 데이터베이스 액세스 오브젝트 에 도달합니다.

is_null, empty, isset을 사용하여 속성 값을 확인해 보았습니다. 나는 마약처럼 느껴져.

require_once('dbaccess.class.php'); 

class User { 
    protected $user_id; 
    protected $first_name; 

function __construct($user_id) 
    { 
    $this->user_id = $user_id; 

    } 

function __get($variablename) 
    { 
    return $this->$variablename; 
    } 

function __set($variablename, $variablevalue) 
    { 
    $this->$variablename = $variablevalue; 
    } 

function __destruct() 
    { 

    } 

function retrieve_user_first_name() 
    {  
    if(!isset($this->first_name)) { 
     $dbAccess = new DBAccess(); 
     $strFirstName = $dbAccess->retrieve_user_first_name($this->user_id); 
     $this->first_name = $strFirstName; 
    } 
    else { 
     $strFirstName = $this->first_name; 
    } 
    return $strFirstName; 
    } 

} 
+1

이것을 호출하는 코드는 무엇입니까? 변수가 설정되지 않았다고 결정한 코드는 무엇입니까? 나에게는 괜찮은 표정으로 보인다. 어쩌면 이전 객체를 재사용하는 대신 의도하지 않게 새 객체를 어딘가에 인스턴스화하는 것일 수 있습니다. – rockerest

+0

작업 후 'print_r/vardump'하려고하면 ... 내 눈을 .히 보입니다. 어떻게 당신은 객체를 유지/유지하고 있습니까? –

+0

당신의 코드가 저에게 효과적입니다. User 인스턴스를 인스턴스화 한 다음 retrieve_user_first_name()을 두 번 호출했습니다. 처음에는 $ this-> first_name을 설정하고, 두 번째는 처음 설정할 값을 사용합니다. 내 생각 엔 당신이 호출 사이에 개체의 새 인스턴스를 만드는 것입니다. – qbert220

답변

1

게시 한 코드가 정상적으로 작동합니다.

나는이 개체에 액세스하는 코드가 무엇이든 순차 호출에 대해 동일한 개체를 사용하지 않는다고 생각합니다.

그래서 같은 :

$ob = new User(); 
$ob->retrieve_user_first_name(); 

$ob = new User(); 
print $ob->first_name; 

이 일어나고있다. 분명히, 그것은 아마도 그렇게 뻔뻔스럽지는 않지만, 그것은 당신의 문제에 대한 가장 단순한 설명입니다.

게시 한 코드가있는 다른 옵션은 모든 데이터베이스 호출이 빈 문자열을 반환하거나 실패하기 때문에 변수가 업데이트되지 않는다는 것입니다. 이것은 매우 좋은 가능성이므로 코드에서이 두 가지 옵션을 모두 확인하십시오.

+0

OMFG. 이봐. 예, 그렇습니다. 방금 다른 페이지로 객체를 전달하려고 시도하고 잘 작동합니다. 금요일 아침 바보. 고맙습니다! – Rob

관련 문제