J'essaie juste d'enregistrer et de corriger les sources de PHPBench.com
et a frappé cette erreur (le site est en panne et l'auteur n'a pas répondu aux questions). Voici la source:
<?php
// Initial Configuration
class SomeClass {
function f() {
}
}
$i = 0; //fix for Notice: Undefined variable i error
// Test Source
function Test6_2() {
//global $aHash; //we don't need that in this test
global $i; //fix for Notice: Undefined variable i error
/* The Test */
$t = microtime(true);
while($i < 1000) {
$obj =& new SomeClass();
++$i;
}
usleep(100); //sleep or you'll return 0 microseconds at every run!!!
return (microtime(true) - $t);
}
?>
Est-ce une syntaxe valide ou non? Corrigez-moi si je me trompe mais pensez que cela crée une référence à SomeClass, afin que nous puissions appeler new $obj()
... Merci d'avance pour l'aide
De toute façon, les objets sont toujours stockés par référence. Vous n'avez pas besoin de =&
Et comme l'a commenté Charlotte, c'est la syntaxe déconseillée.
Corrigez-moi si je me trompe mais pensez que cela crée une référence à SomeClass, afin que nous puissions appeler new $ obj ().
Non, ce n'est pas correct. L'opérateur new
crée toujours une instance de la classe, pas une référence à la classe en tant que type.
Vous pouvez créer une instanciation d'objet variable simplement en créant une variable de chaîne avec le nom de la classe et en l'utilisant.
$class = "MyClass";
$obj = new $class();
Des fonctions comme get_class () ou ReflectionClass :: getName () renvoient le nom de la classe sous forme de chaîne. Il n'y a pas de concept de "référence à la classe" en PHP comme il en existe en Java.
La chose la plus proche à laquelle vous pensez est ReflectionClass :: newInstance () mais c'est un moyen inutile de créer un objet dynamiquement. Dans presque tous les cas, il est préférable d'utiliser simplement new $class()
.