gpt4 book ai didi

php - 在 PHP 中避免空值时,我可以重新实现 isset 吗?

转载 作者:可可西里 更新时间:2023-11-01 00:18:18 24 4
gpt4 key购买 nike

我遇到了我认为每个人都会遇到的空值问题:也就是说,有不同种类的空值。它可能表示“空”、“未更改”、“未设置”、“未知”或任何数量的事物。我已经到了需要以某种方式区分它们的地步。

基本上我的程序有一个数据库管理器部分,它从我的程序的另一部分接收一个表示要在数据库中更新的数据的对象,该部分负责验证表单数据并将其转换为所述对象(其中一个几个具有特定预定义属性的不同类)。我需要一些方法来区分该对象中的“null”属性,这意味着“我实际上想要将值 null 存储在数据库中”和不同类型的“null”,这意味着“如果数据库中存在现有值,请不要'改变它“。在这两者中,后者将是迄今为止更常见的情况,但我需要一些方法来考虑前者。

我目前的想法,似乎最适合这种情况,是创建一个新类来表示 null 的每个“类型”,例如 Unchanged 类与 SetToNull 类型或类似的东西。然后我可以将该属性设置为其中一个类的实例。

唯一的问题是我想要一个行为类似于现有 isset() 函数的函数,因为它允许我检查给定属性是否存在以及它是否具有一个简单语句中的实际值(与我的新空类型之一相反)。

我知道我可以做这样的事情:

if (isset($thing->property) && !($thing->property instanceof Unchanged || $thing->property instanceof SetToNull)){
// do whatever
}

但是,这显然不理想,因为它又长又笨重,而且我不想在我的代码库中随处可见。我更喜欢这样的东西:

if (myCustomIsset($thing->property)){
// do whatever
}

但是,isset 似乎不是一个正常的函数;如果属性尚未定义或类似的东西,它会以某种方式抑制警告,所以我不确定如何自己实现类似的东西。

最佳答案

就我个人而言,我不会更改模型。模型应该代表数据库中的数据,并且其属性的值应该与这些属性代表的列的值相同。

我会考虑改变模型获取数据的方式。听起来您正在从表单数据实例化模型,其中不包含每个属性的值,因为表单仅更新某些属性。

如果您通过从数据库中选择它来实例化模型,然后在验证和保存它之前用表单数据修改它,它将具有每个属性的正确值,并且 null 将明确表示 null。

关于php - 在 PHP 中避免空值时,我可以重新实现 isset 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com