0

簡単な質問かもしれませんが、Neo4j の初心者としての私にとってはハードルです。アプリケーションと同じディレクトリに、composer を使用して neo4jphp をインストールしました。Vendor-Subfolder が作成され、以下の everyman/neo4j フォルダーが使用可能になります。最初のテストでは、サンプルから次のコード スニペットを使用しました。

spl_autoload_register(function ($className) {

  $libPath = 'vendor\\';  
  $classFile = $className.'.php';
  $classPath = $libPath.$classFile;
  if (file_exists($classPath)) {
    require($classPath);
  }
});

require('vendor/autoload.php'); 

use everyman\Neo4j\Client,
    everyman\Neo4j\Transport;

$client = new Client(new Transport('localhost', 7474));
print_r($client->getServerInfo()); 

私はいつもエラーに出くわします

致命的なエラー: 抽象クラス Everyman\Neo4j\Transport をインスタンス化できません

グーグルでジョシュ・アデルからのコメントにたどり着きました。

Everyman\Neo4j\Transport は抽象クラスであるため、インスタンス化できません。必要に応じて、Everyman\Neo4j\Transport\Curl または Everyman\Neo4j\Transport\Stream をインスタンス化する必要があります。

だから私は use-statement を

use everyman\Neo4j\Client,
    everyman\Neo4j\Transport\Curl;

しかし、これは機能しません。デバッグでは、オートローダーが「everyman\Neo4j\Transport\Curl.php」ではなく「Transport.php」のみを取得することが示されています。「Client.php」の場合はまだ機能しています(「vendor\everyman\Neo4j\Client.php」)ので、use-statementが間違っているか、コードが追加のサブフォルダー構造を処理できないと推測しています。

使用する

require('phar://neo4jphp.phar');

正常に動作しますが、これは非推奨であり、composer / autoload に置き換える必要があることを読みました。

誰が何を変更するか、または同じ問題を抱えているかのヒントを持っていますか?

時間をありがとう、バラエル

4

3 に答える 3

1

Josh に感謝します。デフォルトの CURL を使用しても問題ないので、コードを次のように縮小しました。

require('vendor/autoload.php'); 
   use everyman\Neo4j\Client;
    $client = new Everyman\Neo4j\Client('localhost', 7474);
    print_r($client->getServerInfo());` 

フォルダー構造はメインです(ここにファイルとコンテンツを含むcomposer.jsonがあります

{
   "require": {
      "everyman/Neo4j": "dev-master"
    }
}

サブフォルダー「vendor」には、「autoload.php」と、関連するコンテンツを含むサブフォルダー everyman があります。出てきたファイルを実行すると

Fatal error: Class 'Everyman\Neo4j\Client' not found 

autoloadfunction がある場合は発生しません。私はどこかで間違いを犯したと思います - ヒントを教えてもらえますか? どうもありがとう、B

于 2014-10-27T13:58:21.420 に答える