PHP 7:使用" new class"创建不同类的函数。

时间:2016-12-10 21:34:20

标签: 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但是发生了什么?这是一个错误,还是一个&#34;功能&#34; PHP 7的? :)

不过,我试图用它来用PHPUnit用静态方法测试特征。

1 个答案:

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