Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное "новое" (T новое) в .../test6 2.PHP на линии 20

просто пытаюсь сохранить и исправить источники из PHPBench.com

и ударил эту ошибку (сайт не работает и автор не ответил на вопросы). Это источник:

<?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);
}

?>

является ли это допустимым синтаксисом или нет? Поправьте меня, если я ошибаюсь, но думаю, что он создает ссылку на SomeClass, поэтому мы можем вызвать new $obj() ... Заранее спасибо за помощь

1 ответов


объекты всегда хранятся по ссылке. Вам не нужно =& и, как прокомментировала Шарлотта, это устаревший синтаксис.

исправьте меня, если я ошибаюсь, но думаю, что он создает ссылку на SomeClass, поэтому мы можем вызвать new $obj() .

нет, это неправильно. The new оператор всегда создает экземпляр класса, а не ссылку на класс как тип.

вы можете создать экземпляр объекта переменной, просто создав строка переменная с именем класса и использованием этого.

$class = "MyClass";
$obj = new $class();

функции как get_class () или ReflectionClass:: getName () возвращает имя класса в виде строки. В PHP нет понятия "ссылка на класс", как в Java.

самое близкое, о чем вы думаете, это ReflectionClass:: newInstance () но это ненужный способ создания объекта динамически. Почти в каждом случай, лучше просто использовать new $class().