web-dev-qa-db-fra.com

Erreur d'analyse: erreur de syntaxe, 'nouveau' inattendu (T_NEW) dans ... / test6_2.php sur la ligne 20

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

13
1000Gbps

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().

11
Bill Karwin