web-dev-qa-db-ja.com

解析エラー:構文エラー、20行目の... / test6_2.phpに予期しない「新規」(T_NEW)

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()を呼び出すことができます...助けてくれてありがとう

13
1000Gbps

とにかく、オブジェクトは常に参照によって保存されます。あなたは_=&_を必要とせず、シャーロットがコメントしたように、それは非推奨の構文です。

私が間違っているが、それがSomeClassへの参照を作成すると思うなら、私を修正してください、それでnew $ obj()を呼び出すことができます。

いいえ、これは正しくありません。 new演算子は、クラスの型としての参照ではなく、常にクラスのインスタンスを作成します。

クラスの名前でstring変数を作成し、それを使用するだけで、変数オブジェクトのインスタンス化を作成できます。

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

get_class() または ReflectionClass :: getName() などの関数は、クラス名を文字列として返します。 JavaにあるようなPHPには「クラスへの参照」という概念はありません。

あなたが考えている最も近いものは ReflectionClass :: newInstance() ですが、これはオブジェクトを動的に作成する不必要な方法です。ほとんどの場合、new $class()を使用することをお勧めします。

11
Bill Karwin