首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP 7-比较匿名类实例

PHP 7-比较匿名类实例
EN

Stack Overflow用户
提问于 2016-10-06 08:59:20
回答 1查看 357关注 0票数 10

我试过这样的代码:

代码语言:javascript
复制
$ac1 = new class {};
$ac2 = new class {};

var_dump($ac1); // object(class@anonymous)#1 (0) {}
var_dump($ac2); // object(class@anonymous)#2 (0) {}
var_dump(new class {}); // object(class@anonymous)#3 (0) {}

var_dump($ac1 == $ac2); // bool(false)
var_dump($ac1 == new class {}); // bool(false)
var_dump($ac2 == new class {}); // bool(false)

以上比较的结果都是false

但是,当我声明一个返回匿名类的函数时,结果是:

代码语言:javascript
复制
function anonymous_class() {
    return new class {};
}

$ac1 = anonymous_class();
$ac2 = anonymous_class();

var_dump($ac1); // object(class@anonymous)#1 (0) {}
var_dump($ac2); // object(class@anonymous)#2 (0) {}
var_dump(anonymous_class()); // object(class@anonymous)#3 (0) {}

var_dump($ac1 == $ac2); // bool(true)
var_dump($ac1 == anonymous_class()); // bool(true)
var_dump($ac2 == anonymous_class()); // bool(true)

所有打印的

现在的问题是,这是怎么发生的?特别是,它为什么要为第二个上下文打印true,因为知道每个实例的var_dump()结果不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-06 09:11:30

来自http://php.net/manual/en/language.oop5.anonymous.php医生

由同一个匿名类声明创建的所有对象都是该类的实例。

代码语言:javascript
复制
<?php
function anonymous_class()
{
    return new class {};
}

if (get_class(anonymous_class()) === get_class(anonymous_class())) {
    echo 'same class';
} else {
    echo 'different class';
}

上面的示例将输出:相同的类

来自http://php.net/manual/en/language.oop5.object-comparison.php

当使用比较运算符==时,对象变量被以一种简单的方式进行比较,即:如果两个对象实例具有相同的属性值和值(值与==比较),则它们是相等的,并且是同一个类的实例。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39891795

复制
相关文章

相似问题

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