如果我多次使用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但是发生了什么?这是一个错误,还是一个&#34;功能&#34; PHP 7的? :)
不过,我试图用它来用PHPUnit用静态方法测试特征。答案 0 :(得分:0)
我找到了文档,似乎是预期的行为:
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';
}