Почему stdClass и анонимный класс ведут себя по-разному, когда в assertEquals ()? - PullRequest
2 голосов
/ 09 июня 2019

В phpunit

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

в порядке, но

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

не удается.Почему?

1 Ответ

3 голосов
/ 09 июня 2019

Потому что это два разных класса. Каждая инструкция 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...