php - 在 PHP 中将对象和整数相加的语义?

标签 php object type-conversion duck-typing

class wat
{
   public $a = 3.14;
   public $x = 9;
   public $y = 2;
}


$a = new wat();

var_dump(1000 + $a);
var_dump($a + 1000);

输出是:

int(1001)
int(1001)

好吧,添加 wat * object to an integer 显然不是正确的做法,因为 PHP 提示说 “Object of class wat could not be converted to int”,但是,它有什么作用?

(我问这个也有一个实际的原因,我想重构一个函数来摆脱“PHP Notice”,同时仍然保持行为完全不变。)


*: http://img.youtube.com/vi/kXEgk1Hdze0/1.jpg

最佳答案

加法 (+) 如果其中一个是 float,则将两个操作数隐式转换为 float,否则两个操作数都转换为 整数 ( See paragraph #2 .)

看起来,至少现在,一个 object 转换为 int 的结果是值 1,因此结果 1000 + 1 = 10011 + 1000 = 1001,但是,per the documentation ,行为未定义,不应依赖。

如果您打开了 E_NOTICE 错误报告,还应该生成一个通知,说明该对象无法转换为 int。

关于php - 在 PHP 中将对象和整数相加的语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337275/

相关文章:

php - Laravel 5.7 中具有多个值的 Where 子句

java - Java变量中的引用(地址)存储

objective-c - 将不可变对象(immutable对象)转换为可变对象(递归)的最佳方法是什么?

c++ - 如何强制转换优先于其他转换?

php - 带有 xampp 服务器的 Android 应用程序

php - Laravel 帖子和标签 : has many through relationship?

php - 在几列上插入查询会出错

javascript - 直接访问 JSON 子对象的更好方法

java - java中的对象引用

C# 将字符串数据表示形式转换为类型化