이렇게 쉬워야합니다. 개체에 대한 정보를 반환하는 사용자 지정 메서드가있는 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;
}
}
이것을 호출하는 코드는 무엇입니까? 변수가 설정되지 않았다고 결정한 코드는 무엇입니까? 나에게는 괜찮은 표정으로 보인다. 어쩌면 이전 객체를 재사용하는 대신 의도하지 않게 새 객체를 어딘가에 인스턴스화하는 것일 수 있습니다. – rockerest
작업 후 'print_r/vardump'하려고하면 ... 내 눈을 .히 보입니다. 어떻게 당신은 객체를 유지/유지하고 있습니까? –
당신의 코드가 저에게 효과적입니다. User 인스턴스를 인스턴스화 한 다음 retrieve_user_first_name()을 두 번 호출했습니다. 처음에는 $ this-> first_name을 설정하고, 두 번째는 처음 설정할 값을 사용합니다. 내 생각 엔 당신이 호출 사이에 개체의 새 인스턴스를 만드는 것입니다. – qbert220