解析错误:语法错误,第20行的.../test6_2.php中的意外"新"(T_NEW)

100*_*bps 13 php reference operators

只是尝试从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);
}

?>
Run Code Online (Sandbox Code Playgroud)

它是否是有效的语法?纠正我,如果我错了,但认为它创建了对SomeClass的引用,所以我们可以打电话new $obj()...提前感谢帮助

Bil*_*win 11

无论如何,对象总是通过引用存储.你不需要=&,正如夏洛特评论的那样,它已被弃用.

如果我错了,请纠正我,但认为它创建了对SomeClass的引用,因此我们可以调用new $ obj().

不,这不正确.的new操作者总是创建的类,而不是对类的引用作为一种类型的实例.

您可以通过使用类的名称创建一个字符串变量并使用它来创建变量对象实例化.

$class = "MyClass";
$obj = new $class();
Run Code Online (Sandbox Code Playgroud)

get_class()ReflectionClass :: getName()等函数将类名返回为字符串.PHP中没有像Java中那样的"类引用"概念.

你最接近的是ReflectionClass :: newInstance(),但这是一种动态创建对象的不必要的方法.几乎在所有情况下,最好只使用new $class().

  • 比什么更好?没有定义字符串变量?它只是一个标量。如果您的代码对性能如此敏感,以至于使用字符串变量很麻烦,那么您一开始就不应该使用PHP。 (2认同)