1. ホーム
  2. php

[解決済み] パースエラー:構文エラー、予期しない 'new' (T_NEW) in .../test6_2.php on line 20

2022-03-01 07:47:41

質問

からのソースを保存して修正しようとしているだけです。 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() ... よろしくお願いします。

解決方法を教えてください。

オブジェクトはとにかく常に参照で保存されます。そのため =& とCharlotteがコメントしているように、非推奨の構文です。

間違っていたら訂正しますが、SomeClassへの参照を作成し、new $obj() を呼び出せるようにしていると思います。

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

変数オブジェクトのインスタンスを作成するには、単純に 文字列 という変数にクラス名を入れて、それを使っています。

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

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

あなたが考えているものに一番近いのは ReflectionClass::newInstance() しかし、これはオブジェクトを動的に生成するための不要な方法です。ほとんどすべての場合において、単に new $class() .