PHP 7: функция, которая создает разные классы с "новым классом"

Если я создаю класс с PHP7 несколько раз, кажется, что он всегда возвращает один и тот же класс вместо того, чтобы каждый раз возвращать новый.

Например:

function createAClass()
{
    return new class
    {
        public static $foo=0;
    };

}

$class = createAClass();
$class::$foo = 3;
echo "class:".$class::$foo."<br>";

$anotherClass = createAClass();
echo "anotherClass:".$anotherClass::$foo."<br>";

Это вывод:

class:3
anotherClass:3

Я, хотя на выходе должно быть 3 и 0. Что происходит? Это ошибка или "особенность" PHP 7?:)

Кстати, я пытался использовать это для проверки черты с помощью статических методов с PHPUnit.

1 ответ

Я нашел документацию, и кажется, что это ожидаемое поведение:

http://php.net/manual/en/language.oop5.anonymous.php

Все объекты, созданные одним и тем же объявлением анонимного класса, являются экземплярами этого самого класса.

Но мне нужно было создать функцию, которая бы возвращала новый класс каждый раз, когда он вызывался, поэтому я пришел с этим решением:

function createAClass()
{
    $class = null;
    $stamp = random_int(PHP_INT_MIN ,PHP_INT_MAX);
    echo "stamp: $stamp\n";
    $classcode = <<< EOT
\$class = new class {
    public static \$differentiate='$stamp';
    // YOUR CODE HERE
};
EOT;
    echo "Source code of class:\n$classcode\n\n";
    eval($classcode);
    return $class;
}

$class = createAClass();
$anotherClass = createAClass();

if (get_class($class) === get_class($anotherClass)) {
    echo 'same class';
} else {
    echo 'different class';
}
Другие вопросы по тегам