2016-12-10 54 views
0

如果我多次用PHP7創建一個類,它似乎總是返回同一個類,而不是每次都返回一個新類。PHP 7:用「新類」創建不同類的函數

例如:

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靜態方法來測試一個特質。

回答

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