所以我面临这个问题。我有一个类代表数据库中的一条记录(本例中为 User)。该类具有与数据库表的列一样多的属性。为简单起见,我的示例中只有三个:
$id
- 用户的ID(对于注册用户必须设置为正整数,对于尚未保存在数据库中的用户对象可能设置为0)
$name
- 用户名(必须为每个用户设置,但在从数据库加载之前可能未定义)
$email
- 用户的电子邮件地址(如果用户未提交电子邮件地址,则可能为 NULL)
我的(简化的)课程如下所示:
<?php
class User
{
private $id;
private $name;
private $email;
public function __construct(int $id = 0)
{
if (!empty($id)){ $this->id = $id; }
//If $id === 0, it means that the record represented by this instance isn't saved in the database yet and the property will be filled after calling the save() method
}
public function initialize(string $name = '', $email = '')
{
//If any of the parameters isn't specified, prevent overwriting curent values
if ($name === ''){ $name = $this->name; }
if ($email === ''){ $email = $this->email; }
$this->name = $name;
$this->email = $email;
}
public function load()
{
if (!empty($this->id))
{
//Load name and e-mail from the database and save them into properties
}
}
public function save()
{
if (!empty($this->id))
{
//Update existing user record in the database
}
else
{
//Insert a new record into the table and set $this->id to the ID of the last inserted row
}
}
public function isFullyLoaded()
{
$properties = get_object_vars($this);
foreach ($properties as $property)
{
if (!isset($property)){ return false; } //TODO - REPLACE isset() WITH SOMETHING ELSE
}
return true;
}
//Getters like getName() and getId() would come here
}
现在终于解决我的问题了。正如您所看到的,可以在不设置所有属性的情况下创建此类的实例。getName()如果我想在名称未知的情况下进行调用(未通过initialize()方法设置并且未调用 load() ),那么这是一个问题。为此,我编写了一种方法isFullyLoaded(),该方法检查所有属性是否已知,如果不已知,load()则应调用(从调用的方法中调用isFullyLoaded())。问题的核心是,某些变量可能是空字符串('')、零值(0 )甚至 null (如$email属性)。所以我想区分设置了任何值(包括 null)的变量和从未分配过任何值的变量。
TL:DR PHP中如何区分未定义变量和已赋值为NULL的变量?
慕桂英546537
慕尼黑5688855
明月笑刀无情