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';
}