PHP:无法在对象方法中设置对象属性?

时间:2011-02-25 16:44:34

标签: php oop

这应该很容易。我有一个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 个答案:

答案 0 :(得分:1)

您发布的代码工作正常。

我认为问题在于,在访问此对象的任何代码中,您没有为顺序调用使用相同的对象。

类似于:

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

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

正在发生。显然,它可能不是那么明显,但这是对你的问题最简单的解释。

鉴于您发布的代码,唯一的另一个选择是所有数据库调用都返回空字符串或失败,因此变量永远不会更新。这是一个非常好的可能性,因此请在代码中检查这两个选项。