这应该很容易。我有一个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;
}
}
答案 0 :(得分:1)
您发布的代码工作正常。
我认为问题在于,在访问此对象的任何代码中,您没有为顺序调用使用相同的对象。
类似于:
$ob = new User();
$ob->retrieve_user_first_name();
$ob = new User();
print $ob->first_name;
正在发生。显然,它可能不是那么明显,但这是对你的问题最简单的解释。
鉴于您发布的代码,唯一的另一个选择是所有数据库调用都返回空字符串或失败,因此变量永远不会更新。这是一个非常好的可能性,因此请在代码中检查这两个选项。