首页 > 解决方案 > 如何检查对象属性是否显式设置为 NULL

问题描述

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

class User
{
  public id;
  public name;
  public surname;
  public gender;
  public age;
}

在我的代码中,我想根据设置的属性为这样的对象创建动态 UPDATE 语句。所以我希望我的 UPDATE (传输到数据库)并只更改已更改的列。如果未设置用户的属性之一,则此属性不应包含在 UPDATE 语句中的 db 列中。

例如,如果我创建User对象并仅设置idname并且surname(agegender保持未设置)

$User=new User();
$User->id=1;
$User->name='Bob';
$User->surname='Geldof';

从这个对象我的代码应该像这样创建 UPDATE 语句:

UPDATE users SET name='Bob',surname='Geldof' WHERE id=1

问题是当数据库中的列可以具有 NULL 值时(age例如)。在这种情况下,我应该能够在数据库中将该列设为空。在那里我应该检查用户对象属性是否显式设置为 NULL。如果将其设置为 NULL,则 UPDATE 语句的结果应为:

UPDATE users SET name='Bob',age=NULL WHERE id=1

但是没有办法测试属性是否设置但设置为 NULL 值!

目前在这种情况下,我将属性设置为“NULL”字符串并在我的代码中解析它以在创建 UPDATE 语句时将“NULL”字符串转换为 NULL 值。

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

标签: php

解决方案


如果属性设置为 NULL 或未设置,则 isset() 没有区别。

试试 PHP 的函数 property_exists($user,age)

见:https ://www.php.net/manual/en/function.property-exists.php


推荐阅读