我在Windows系统上进行开发,并经常使用!==
比较来确保值和类型都符合预期。我只是遇到了问题(比较失败)并且刚刚发现 int 类型的值(在 mysql 中)被作为字符串处理。
在 Windows 上,它看起来像这样:
Order {#488 ▼
#table: "orders"
#guarded: array:1 [▶]
#hidden: []
#fillable: array:9 [▶]
#dates: array:1 [▶]
#connection: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:14 [▼
"id" => 6
"currency_id" => 1
"user_id" => 1
"coupon_id" => 1
"status" => 2
"created_at" => "2017-06-26 00:37:44"
"updated_at" => "2017-06-26 00:37:50"
"deleted_at" => null
]
在 CentOS 上是这样的:
Order {#488 ▼
#table: "orders"
#guarded: array:1 [▶]
#hidden: []
#fillable: array:9 [▶]
#dates: array:1 [▶]
#connection: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:14 [▼
"id" => "6"
"currency_id" => "1"
"user_id" => "1"
"coupon_id" => "1"
"status" => "2"
"created_at" => "2017-06-26 00:37:44"
"updated_at" => "2017-06-26 00:37:50"
"deleted_at" => null
]
我真的不知道是什么原因造成的。请让我知道需要哪些额外信息才能找到答案。由于我根本不知道,所以我不知道到底什么可能是相关的。
其他信息:
我使用的是 Laravel 5.1,并使用 Laravel 的 dd() 方法打印此信息。数据是 Eloquent 模型的实例。
最佳答案
问题可能只是与数据库交互的底层扩展中的一些细微差异,或者是数据库与代码之间的抽象层中的一些实现差异(版本差异?)。信息如此有限,很难判断。
但是,一般来说,在 PHP 中,您应该假设数据库值作为字符串传递给您,即使它们实际上是数据库中的整数/ float / bool 值。假设您需要自己进行类型检查和(如果需要)类型转换。
我还警告您不要在 PHP 中进行过度严格的检查。我明白你为什么要这样做,在大多数其他语言中我都会和你在一起,但 PHP 的定义特征之一是它对 native 类型漠不关心,并且能够自动在它们之间切换,因此在该语言中您不应该尝试过多地强制类型严格性。
关于php - 在 CentOS 7.1 和 Laravel 5.1 上,Int 在 PHP 中被处理为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44751822/