Php 如何检查对象属性是否显式设置为NULL

Php 如何检查对象属性是否显式设置为NULL,php,Php,假设我有这样一个简单的对象: class User { public id; public name; public surname; public gender; public age; } UPDATE users SET name='Bob',surname='Geldof' WHERE id=1 在我的代码中,我想根据设置的属性为这样的对象创建动态更新语句。因此,我希望更新(传输到数据库)并只更改已更改的列。若用户的某个属性未设置,则该属性不应作为db列包含在UP

假设我有这样一个简单的对象:

class User
{
  public id;
  public name;
  public surname;
  public gender;
  public age;
}
UPDATE users SET name='Bob',surname='Geldof' WHERE id=1
在我的代码中,我想根据设置的属性为这样的对象创建动态更新语句。因此,我希望更新(传输到数据库)并只更改已更改的列。若用户的某个属性未设置,则该属性不应作为db列包含在UPDATE语句中

例如,如果我创建
User
对象并仅设置
id
name
姓氏
age
gender
不设置)

从这个对象,我的代码应该创建如下更新语句:

class User
{
  public id;
  public name;
  public surname;
  public gender;
  public age;
}
UPDATE users SET name='Bob',surname='Geldof' WHERE id=1
问题是数据库中的列可能有空值(例如
age
)。在这种情况下,我应该能够在数据库中为该列设置空值。在那里,我应该检查用户对象属性是否显式设置为NULL。如果设置为NULL,则UPDATE语句的结果应为:

UPDATE users SET name='Bob',age=NULL WHERE id=1
但是没有办法测试属性是否设置为空值

在这种情况下,我将属性设置为“NULL”字符串,并在代码中对其进行解析,以便在创建UPDATE语句时将“NULL”字符串转换为NULL值


是否可以区分对象属性是否显式设置为NULL值(不是“NULL”字符串)

我不知道我是否遗漏了什么,但你要寻找的答案似乎很简单

  • 如果任何变量显式设置为
    NULL
    ,则可以使用 :
  • 您还可以通过使用检查属性是否存在

然而,对于文章的其余部分,这似乎毫无意义,因为您可能只需忽略您没有的值并使用数据库的默认null选项(除非您的特定数据库出于某种原因不支持该选项)。

isset()在属性设置为null或未设置时没有区别

尝试PHP的函数属性_exists($user,age)


请看:

这不是我想要的。如果我只想更改名称,您的代码将使我的用户年龄为空!!!年龄应该保持不变。@sbort不,不会。请更新你的帖子,告诉我你想要什么。现在它回答了您的问题:“如何检查对象的属性是否显式设置为NULL”。我不是一个读心术的人,我的代码只是一个示例,说明如何根据您的请求检查对象的属性是否设置为null和
$user=新用户(1,'John',NULL),您将得到相同的结果-isset不会检测您是否将属性设置为null@我可以清楚地看到,这并不意味着什么。听着,我想帮你,你没必要这么粗鲁。通过执行
$user=new user()
您正在创建一个
类的实例。该实例现在是一个继承给定类属性和方法的对象。如果您更新该对象的属性,它将不会修补任何其他属性,您将混淆对象创建和更新它。此外,如果设置了属性,则
isset()
将返回true,否则返回false
is_null()
如果属性为null,则返回true,否则返回false(这就是你问题的答案)。@sbrbot如果你能为你的特定案例提供某种真正的输入输出管道,那么也许我可以为你面临的实际问题提供更好的解决方案,现在我不明白你到底想在这里实现什么,但我回答了你的问题,答案是正确的。如果您面对的是可能不存在的属性,您也可以使用
property\u exist(obj,prop)
,它类似于
isset()
,但即使属性为NULL也会返回true。