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

2022-08-30 20:05:11

只是试图保存和修复来自 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

无论如何,对象始终通过引用存储。你不需要,正如Charlotte所评论的那样,它是不推荐使用的语法。=&

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

不,这是不正确的。运算符始终创建类的实例,而不是将类作为类型引用。new

只需创建具有类名称的字符串变量并使用该变量,即可创建变量对象实例化。

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

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

您想到的最接近的东西是ReflectrectionClass::newInstance(),但这是动态创建对象的一种不必要的方式。几乎在每种情况下,最好只使用 .new $class()


答案 2

推荐