php - 如何检查对象属性是否显式设置为 NULL
问题描述
假设我有这样的简单对象:
class User
{
public id;
public name;
public surname;
public gender;
public age;
}
在我的代码中,我想根据设置的属性为这样的对象创建动态 UPDATE 语句。所以我希望我的 UPDATE (传输到数据库)并只更改已更改的列。如果未设置用户的属性之一,则此属性不应包含在 UPDATE 语句中的 db 列中。
例如,如果我创建User
对象并仅设置id
,name
并且surname
(age
并gender
保持未设置)
$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”字符串)?
解决方案
如果属性设置为 NULL 或未设置,则 isset() 没有区别。
试试 PHP 的函数 property_exists($user,age)
见:https ://www.php.net/manual/en/function.property-exists.php
推荐阅读
- microsoft-graph-api - Microsoft Graph GetChat API 为某些聊天返回禁止错误
- python - 是否可以在 python 中从(json)文件创建枚举类?
- python - 如何在 Azure 数据工厂 - Databricks 中使用 continuation_token 获取 ADF 管道运行详细信息的下一页?
- http - django rest framework post 方法不允许
- mysql - MySQL 从具有多个值的行中选择特定数据
- jython - 如何从字符串中删除 \r\n ?
- flutter - Flutter:无法编辑 TextFormField
- css - react-step-progress 栏样式自定义
- javascript - 在 Apollo 客户端中使用多个端点
- r - 将函数泛化为矢量格式 data.table