首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在assertEquals()中stdClass和匿名类的行为不同?

为什么在assertEquals()中stdClass和匿名类的行为不同?
EN

Stack Overflow用户
提问于 2019-06-10 00:13:28
回答 1查看 26关注 0票数 2

在phpunit中

$this->assertEquals((object)[], (object)[]); 
//and
$this->assertEquals(new stdClass(), new stdClass());

是可以的,但是

$this->assertEquals(new class{}, new class{});

失败。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 01:15:19

因为它们是两个不同的类。每条new class{}指令都会生成一个单独的类定义。

$one = new class{};
$two = new class{};
var_dump(get_class($one), get_class($two));

输出:

string(39) "class@anonymous/in/FULlj0x7fc9081ac018"
string(39) "class@anonymous/in/FULlj0x7fc9081ac02c"

只有在您的代码中由相同指令创建的匿名类的实例才会共享该类:

function createClass() {
  return new class{};
}
$one = createClass();
$two = createClass();
var_dump(get_class($one), get_class($two));

输出:

string(39) "class@anonymous/in/sbApQ0x7f3138fe3089" 
string(39) "class@anonymous/in/sbApQ0x7f3138fe3089"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56516255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档